一尘不染

如何从UITableViewCell类引用UITableViewController?

swift

我有以下几点:

  1. UITableViewController
  2. UITableView
  3. 自定义UITableViewCell子类

我为该单元格使用了一个.xib文件,它是一个CustomCell子类。此自定义单元为单元按钮上的某些触摸事件处理IBAction。

我想从单元格中引用ViewController及其一些变量。

我应该如何从UITableViewCell类访问UITableViewController?


阅读 205

收藏
2020-07-07

共1个答案

一尘不染

我不会在单元和视图控制器之间创建这种依赖关系-这会使体系结构更加复杂,并且单元不可重用。

我建议您使用委派模式,这听起来可能有些复杂-尽管您已经在使用(这UITableViewDelegate是一个典型示例):

  • MyCellProtocol使用一种方法创建协议didTapCell,接受UITableViewCell要传递给视图控制器的和/或一些自定义数据
  • 在您的自定义单元格中创建一个公共委托属性: weak var cellDelegate: MyCellProtocol?
  • didTapXXX处理程序或didSelectRowAtIndexPath您的单元格中,调用self.cellDelegate?.didTapCell(),传递期望的参数
  • 在您的视图控制器中,实现 MyCellProtocol
  • cellForRowAtIndexPath您的视图控制器中,当创建/使单元出队时,将其cellDelegate属性设置为self

此时,在单元格中轻按时,将didTapCell调用视图控制器的方法,然后您就可以执行所需的任何操作。

关键是:而不是让单元处理单元的轻击/选择,而是通知视图控制器并让其完成工作。

2020-07-07