我有一个自定义为UITableViewController
的{{1}},每个单元格内部都有一个UITableViewCell
。
当这些开关中的任何一个打开/关闭(需要在节标题中显示打开的开关数量)时,需要更新表中的信息(标题中的字符串)。
我对iOS和UIKit不确定,但是我已经找到了两种可能的解决方案:
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
中实现计数吗?还是第一个使用委托模式的解决方案是一个好方案?
答案 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