How to reference UITableViewController from a UITableViewCell class?

前端 未结 6 454
余生分开走
余生分开走 2020-12-08 06:33

I have the following:

  1. UITableViewController
  2. UITableView
  3. Custom UITableViewCell subclass

I used a .xib file for the cell, which

6条回答
  •  心在旅途
    2020-12-08 07:25

    I wouldn't create this kind of dependency between the cell and the view controller - that makes the architecture more intricate and the cell not reusable.

    I suggest you to use the delegation pattern, which may sound a little complicated - although you're already using (UITableViewDelegate is a typical example):

    • create a protocol MyCellProtocol with one method didTapCell, accepting a UITableViewCell and/or some custom data you want to pass to the view controller
    • create a public delegate property in your custom cell: weak var cellDelegate: MyCellProtocol?
    • in the didTapXXX handler or didSelectRowAtIndexPath of your cell, call self.cellDelegate?.didTapCell(), passing the expected parameters
    • in your view controller, implement the MyCellProtocol
    • in cellForRowAtIndexPath of your view controller, when creating/dequeuing the cell, set its cellDelegate property to self

    At this point, when a tap is done in your cell, the didTapCell method of the view controller is called, and from there you can do whatever you need to achieve.

    The key point is: rather than making the cell handle the cell tap/selection, notify the view controller and let it do the job.

提交回复
热议问题