Делегат из UITableViewCell не работает - PullRequest
1 голос
/ 12 апреля 2019

У меня есть пользовательский 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 Ответ

0 голосов
/ 12 апреля 2019

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

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