У меня есть пользовательский 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
не вызывается, и я не знаю почему.
Я использовал это ранее в другом проекте, и он работал нормально.