#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
Я создаю приложение iOS с помощью TableView, оно использует базу данных Realm для datamodel. Когда я пытаюсь удалить строку, перетаскивая ячейку влево, заголовок раздела следует за движением перетаскивания влево. При нажатии кнопки delete ячейка удаляется, а заголовок раздела перемещается обратно в нужное место.
Есть какие-либо подсказки, почему заголовок раздела перемещается вместе с ячейкой?
Ячейка заголовка определяется в раскадровке как ячейка динамического прототипа, а ячейки строк определяются в отдельном xib и регистрируются в tableview. В ячейке раздела параметр «Отступ при редактировании» не отмечен в раскадровке.
«Еженедельный отчет» находится в заголовке раздела.
Вот код, который я реализовал для включения редактирования:
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
try! realm.write {
let reportToDelete = reportList[indexPath.row]
realm.delete(reportToDelete)
tableView.deleteRows(at: [indexPath], with: .fade)
}
}
}
Я пробовал как на устройстве, так и на двух разных симуляторах, а также с очисткой папки сборки.
Редактировать
Заголовок загружается из раскадровки, где он имеет повторно используемый идентификатор: «WeeklyReportHeader», и пользовательский просмотр, возвращаемый делегатом TableView.
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return tableView.dequeueReusableCell(withIdentifier: "WeeklyReportHeader")! as UIView
}
Комментарии:
1. Является ли ячейка заголовка и ячейки строки одного типа?
2. Я имею в виду тот же пользовательский класс
3. Нет .. Заголовок раздела не является подклассом, это просто UITableViewCell, а ячейка строки является определенным подклассом UITableViewCell.
4. Хорошо, я думаю, что у меня есть решение для вас, минутку.
5. На самом деле, прежде чем я все это напишу, не могли бы вы добавить код, который вы используете для создания заголовка, в свой вопрос? Это помогло бы мне узнать, на правильном ли я пути.
Ответ №1:
Я думаю, что это как-то связано с использованием ячейки в качестве заголовка, возможно, какая-то проблема связана с повторным использованием ячейки.
Чтобы исправить это, вместо того, чтобы использовать саму ячейку (и использовать ее как UIView для заголовка), используйте ее свойство contentView, которое в любом случае является UIView.
Например
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return tableView.dequeueReusableCell(withIdentifier: "WeeklyReportHeader")!.contentView
}
Комментарии:
1. Нет проблем 🙂 рад, что смог помочь!