tableView(canEditRowAt) больше не работает с tableViewDiffableDataSource
Я создал довольно простой tableView для выбора категории для модели элемента. Вчера все работало нормально. Сегодня я пытался переключить источник данных tableView на
UITableViewDiffableDataSource
так как я хочу обдумать API. У меня есть резервная копия и работает весь tableView, КРОМЕ Я больше не могу редактировать свои строки!
логика работает как
newCategoryButton
отключается, когда я нажимаю кнопку редактирования на панели навигации, и включается, когда я нажимаю на нее снова. Однако я никогда не могу провести пальцем, чтобы удалить, и значки удаления не отображаются рядом с моими строками в режиме редактирования.
Я пытался удалить
setEditing
, опорожнение
commit editingStyle
и просто установив
canEditRow
к
return true
и по-прежнему ничего.
Любая помощь будет очень признательна. Благодарить!
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
let section = dataSource.snapshot().sectionIdentifiers[indexPath.section]
if section == .noneSelected {
return false
} else {
return true
}
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
if editing == true {
newCategoryButton.isEnabled = false
} else {
newCategoryButton.isEnabled = true
}
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
categories.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
}
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let movedCategory = categories.remove(at: sourceIndexPath.row)
categories.insert(movedCategory, at: destinationIndexPath.row)
}
1 ответ
Беда в том, что
canEditRowAt
это метод источника данных . Вы (контроллер представления) теперь не являетесь источником данных; доступный источник данных -. Вам необходимо реализовать этот метод внутри источника данных, доступного для просмотра . Обычно это делается путем создания подкласса от класса источника данных, доступного для сравнения, чтобы вы могли переопределить этот метод. В противном случае источник данных для различий просто возвращает свое значение по умолчанию, то есть
false
, поэтому в настоящее время вы не можете редактировать никакие строки.