触发单元格的IBAction时如何更新UITableViewController的信息?

时间:2019-03-31 18:33:33

标签: ios swift uikit

我有一个自定义为UITableViewController的{​​{1}},每个单元格内部都有一个UITableViewCell

当这些开关中的任何一个打开/关闭(需要在节标题中显示打开的开关数量)时,需要更新表中的信息(标题中的字符串)。

我对iOS和UIKit不确定,但是我已经找到了两种可能的解决方案:

  1. 在单元格和表控制器之间实现委托模式
  2. 在函数UISwitch内编写更新逻辑

在第一个解决方案中,我的tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell符合

TableViewController

更新其内部打开计数器-并更新函数protocol TableViewDelegate { func reloadTable() } 中的标头部分-调用

tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?

很明显,我的自定义DispatchQueue.main.async{ self.tableView.reloadData() } 具有对委托人UITableViewCell的引用,并调用其TableViewController

第二种解决方法是关于在方法reloadTable()中获取每个单元格信息的可能性。我发现该函数不仅在必须绘制表时调用,而且在与组件交互到单元格中时调用。

所以我需要在函数cellForRowAt indexPath中实现计数吗?还是第一个使用委托模式的解决方案是一个好方案?

2 个答案:

答案 0 :(得分:1)

您应该在单元格中使用一个委托..可以像这样

O(log(n)^2) = o(n)

然后在您的单元格中使用它

protocol CellDelegate: class {
   func actionDidPressed()
}

然后最后在您的控制器中就可以使用它

class cell: UITableViewCell {
    weak var delegate: CellDelegate?

    @IBAction func buttonPressed() {
       delegate?.actionDidPressed()
    }

 }

我更喜欢对View Controller进行扩展以符合委托

class ViewController: UIViewController {

     // in your cellAtIndexPath method after creating cell you can 

     cell.delegate = self 

}

答案 1 :(得分:0)

您可以使用NSNotification在不同视图之间传递数据。您需要使用addObserver方法注册收件人控制器,并使用post发送消息。您可以参考this post