#ios #swift #xcode #uitableview #delegates
#iOS #swift #xcode #uitableview #делегаты
Вопрос:
У меня есть пользовательский UITableViewCell
интерфейс, который содержит кнопку. При нажатии кнопки какое-либо действие (в данном случае удаление ячейки) должно выполняться в том ViewController
месте, где UITableView
находится.
Я пробовал это с помощью delegate
.
В моей пользовательской ячейке у меня есть
protocol CellDeleterDelegate: class {
func deleteIngredAt(index:IndexPath)
func deleteReceiptAt(index:Int)
func reloadData()
}
и
weak var delegate: CellDeleterDelegate?
и
else {
print("before Delete")
delegate?.deleteIngredAt(index: indexP)
print("after Delete")
delegate?.reloadData()
print(indexP)
}
для вызова необходимых функций (перед тем, как я удалю данные из массива, который является источником данных для таблицы)
В моем ViewController
у меня есть следующий код:
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, CellDeleterDelegate{
[...]
func deleteIngredAt(index: IndexPath) {
print("reached DeleteIngred")
UIView.setAnimationsEnabled(true)
self.tableView.deleteRows(at: [index], with: .automatic)
}
func deleteReceiptAt(index:Int) {
print("reached DeleteIngred")
let indices: IndexSet = [index]
UIView.setAnimationsEnabled(true)
tableView.deleteSections(indices, with: UITableView.RowAnimation.fade)
}
func reloadData() {
print("reload reached")
tableView.reloadData()
}
Но ни одна из функций в моем ViewController
не вызывается, и я не знаю почему.
Я использовал это ранее в другом проекте, и он работал нормально.
Комментарии:
1. напишите следующее в ячейкеforrowat cell.delegate = self
2. Какой смысл
func reloadData()
, когда все, что вы хотите сделать, это оператор печати и перезагрузить TableView3. @ZeeshanAhmed да, так оно и было, спасибо
4. @ShubhamBakshi просто для перезагрузки данных, в моем предыдущем проекте таблица была перезагружена до завершения анимации удаления ячейки, это был мой обходной путь, но в этом проекте он не нужен
Ответ №1:
я думаю, вы забыли вызвать cell.delegate = self в
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}
Комментарии:
1. Да, я забыл, что спасибо