美文网首页iOS 深度好文技术 学习
(iOS)给TableViewCell加上生命周期事件(如cel

(iOS)给TableViewCell加上生命周期事件(如cel

作者: 码懂 | 来源:发表于2016-01-15 00:10 被阅读2137次
    生命周期(图片来自网络)
    首发: http://www.jianshu.com/p/64c76a587450
    

    本文的上一篇谈及个人对于UITableViewCel的一些观点。这里本来想说说实现方法的。但是看了下,好像也没有什么好说的,代码其实就只有一点点,在这里:
    Swift版本:UITableViewCell-Lifecycle-Swift
    Objective-C版本:UITableViewCell-Lifecycle

    是这样的

    1. 首先,要实现cellWillAppear,大约得在tableView:willDisplayCell:forIndexPath:中,对各cell进行cellWillAppear的调用
    • 由于tableView:willDisplayCell:forIndexPath:是个protocol,并没有默认实现,则需要找到一个其实现的基础
    • 由于TableView的delegate可以实现在单独的类中,因此考虑创建一个用于此目的的基类:MDTableViewDelegate,这个类中实现此protocol中的tableView:willDisplayCell:forIndexPath:。如此,TableView将其delegate设置到MDTableViewDelegate的子类即可使其cell获得cellWillAppear的调用。
    • 等一下!由于用户可能会override tableView:willDisplayCell:forIndexPath:用于自己的实现,因此上面一步还需要一些额外处理。没错,可以用method swizzling创建一个李鬼。
    • method swizzling实现在哪?
      • 如果直接实现在MDTableViewDelegate中,那么若子类的实现了tableView:willDisplayCell:forIndexPath:,则必须显示的调用[super tableView:willDisplayCell:forIndexPath]。详见Swift版本的实现
    • 如果实现在MDTableViewDelegate的子类中,则其子类完全可以忽略super的调用过程,代价则是需要有一个全体class的遍历过程。详见Objective-C版本的实现
    • 各有利弊

    另一些好东西

    实现cellWillAppear等事件的过程中,顺便还加入了isCellWillAppeared的标志位(好吧,也许应该改改名为isCellWillAppearFired??),标识cellWillAppear是否是首次调用。
    因为这个标志位超级好用,所以我也把相应的一套实现在UIViewController中了。比如viewWillAppear现在多了一个isViewWillAppeared (isViewWillAppearFired??) 来标识viewWillAppear是否首次调用,用以方便的决定部分参数的设置。

    相关文章

      网友评论

      • Rchongg:像cell的生命周期,一般的使用场景是什么❓

      本文标题:(iOS)给TableViewCell加上生命周期事件(如cel

      本文链接:https://www.haomeiwen.com/subject/tqtckttx.html