我有以下内容:
- UITableViewController
- UITableView
- 自定义 UITableViewCell 子类
我为单元格使用了一个 .xib 文件,它是一个 CustomCell
子类。此自定义单元格处理单元格按钮上的某些触摸事件的 IBAction。
我想从单元格中引用 ViewController 及其一些变量。
我应该如何从 UITableViewCell 类访问 UITableViewController?
最佳答案
我不会在单元格和 View Controller 之间创建这种依赖关系 - 这会使架构更加复杂并且单元格不可重用。
我建议您使用委托(delegate)模式,这听起来可能有点复杂 - 尽管您已经在使用(UITableViewDelegate
是一个典型示例):
- 使用一个方法
didTapCell
创建一个协议(protocol)MyCellProtocol
,接受一个UITableViewCell
和/或您想要传递给 View Controller 的一些自定义数据 - 在您的自定义单元格中创建一个公共(public)委托(delegate)属性:
weak var cellDelegate: MyCellProtocol?
- 在单元格的
didTapXXX
处理程序或didSelectRowAtIndexPath
中,调用self.cellDelegate?.didTapCell()
,传递预期的参数< - 在你的 View Controller 中,实现
MyCellProtocol
- 在 View Controller 的
cellForRowAtIndexPath
中,在创建/出列单元格时,将其cellDelegate
属性设置为self
此时,当在您的单元格中完成点击时,将调用 View Controller 的 didTapCell
方法,您可以从那里执行您需要实现的任何操作。
关键点是:通知 View Controller 并让它完成工作,而不是让单元处理单元点击/选择。
关于ios - 如何从 UITableViewCell 类引用 UITableViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26467606/