Делегат из UITableViewCell не работает

#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() , когда все, что вы хотите сделать, это оператор печати и перезагрузить TableView

3. @ZeeshanAhmed да, так оно и было, спасибо

4. @ShubhamBakshi просто для перезагрузки данных, в моем предыдущем проекте таблица была перезагружена до завершения анимации удаления ячейки, это был мой обходной путь, но в этом проекте он не нужен

Ответ №1:

я думаю, вы забыли вызвать cell.delegate = self в

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}
  

Комментарии:

1. Да, я забыл, что спасибо