Ниже приведен базовый код для списка SwiftUI, который позволяет удалять все строки свайпом. Можно ли ограничить это определенными строками/индексами? (т. е. разрешить смахивание для удаления только в 3-й строке, но отключить его во всех остальных строках?)
В моем приложении у меня есть список комментариев, и я хочу, чтобы пользователь мог смахнуть, чтобы удалить свой комментарий, но поведение смахивания, чтобы удалить, должно быть отключено для всех других комментариев. Я знаю, что это возможно в UIKit с одним из делегатов UITableView, но я не уверен, как это реализовать в SwiftUI.
struct ListTest: View {
var body: some View {
List {
ForEach(0..<50) { index in
Text("index is \(index)")
}
.onDelete(perform: { indexSet in
print(indexSet)
})
}
}
}
Вот решение. Протестировано с Xcode 12.1/iOS 14.1
List {
ForEach(0..<50) { index in
Text("index is \(index)")
.deleteDisabled(index == 3) // << ex. !!
}
.onDelete(perform: { indexSet in
print(indexSet)
})
}