UITableViewCell的几种初始化方法

首先丢出我的Demo吧,代码加描述,理解更清晰。https://github.com/youngfewang/TableViewCellForInit

在开发的过程中,总会有一些需要注重细节的,从一些需求,可能追溯到根源。前一段时间,有一个需求:cell内UILable两行显示时,隐藏其余信息。具体效果如图:


0DF08503F7775FDBC5E7E74065B86966.jpg

检测文本是否两行,我就不详细讲述了,我的Demo中都有。这里详细讲述一下UITableViewCell的几种初始化方法。


WX20190410-142552.png

1、- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;
方法的官方解释,大意上是说,从重用池中寻找空闲的Cell,不会重新创建。也就是说如果重用池中没有符合标识的cell,那么就会返回空。

2、- (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;
这个初始化方法,有一个大前提,那就是cell已经注册过了。然后会从重用池中找出空闲的符合标识的cell,然后调整cell的大小。

3、- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier;
这个方法比较通用和硬核,但是并没有重用。所以一般是结合第一种重用方法来使用。

以上就是使用的一些方法。而从注册cell到重用cell的时候,也有区分多种方式:
1、代码手动为UITableView注册UITableViewCell,此时选择使用上面方法1和方法2去重用cell都可以(此处不考虑性能,虽然个人觉得这两个的性能也相差不大😊😊)。但是这两个的小细节就是方法1并不会调整cell的大小,也就是说此时cell的宽度并不是被确定的,如果想通过宽度去处理一些问题,那么就会不正确。也就是我拿到需求后遇见的问题。
2、通过StoryBoard或XIB来为UITableView注册UITableViewCell。这种情况和上面的代码手动添加是一样的。
3、不为UITableView注册UITableViewCell。此时重用池中是没有这种cell的,通过上面方法1来获取cell,会返回空对象,此时必须要手动通过方法3来初始化一个。而且!!!记住方法2,有个大前提,默认cell已经注册过。也就是说,如果没有为UITableView注册UITableViewCell,那么一定不能使用方法2。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,165评论 1 32
  • 一、简介 <<UITableView(或简单地说,表视图)的一个实例是用于显示和编辑分层列出的信息的一种手段 <<...
    无邪8阅读 10,779评论 3 3
  • UITableViewCell 父类是UIView UITableView的每一行都是一个UITableViewC...
    翻这个墙阅读 6,712评论 0 1
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 9,115评论 3 38
  • UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一...
    zxb有缘阅读 2,834评论 0 1