【问题标题】:Delegate from UITableViewCell doesn't workUITableViewCell 的委托不起作用
【发布时间】:2019-04-12 12:09:54
【问题描述】:

我有一个自定义的UITableViewCell,其中包含一个按钮。单击按钮时,应在UITableView 所在的ViewController 中执行某些操作(在本例中为删除单元格)。

我尝试使用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)
        }

调用所需的函数(在 else 之前,我从数组中删除数据,该数组是表的数据源)

在我的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 中的任何函数都没有被调用,我不知道为什么。 我之前在另一个项目中使用过它,效果很好。

【问题讨论】:

  • 在 cellForRowAt cell.delegate = self 中写入以下内容
  • func reloadData() 的意义何在?当您想要做的只是打印语句并重新加载 tableView
  • @ZeeshanAhmed 是的,就是这样,谢谢
  • @ShubhamBakshi 只是为了重新加载数据,在我之前的项目中,在删除单元格的动画完成之前重新加载了表格,这是我的解决方法,但在这个项目中不是必需的

标签: ios swift xcode uitableview delegates


【解决方案1】:

我想你忘记在

中调用 cell.delegate = self
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
}

【讨论】:

  • 是的,我忘了谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
相关资源
最近更新 更多