UITabelView和UICollectionView是学习IOS基础知识时入门的两个类,它们都继承至UIScrollView,都可以用来处理出现重复单元的问题,因此将两者放在一块对比学习,能更深刻地理解这两个类。
1 UITabelViewCell创建的三种方式:
(1)自定义
[UITableViewCell alloc] initWithStyle:(UITableViewCellStyle) reuseIdentifier:(nullable NSString *)]在自定义Cell的.m文件中重写父类的这个方法,能够在该方法中添加控件的定义。通过Cell类的延展可以定义只能在该类中使用的私有控件,然后通过重写.h文件中属性的set方法实现自定义控件的内容和frame赋值;
(2)xib 选择UITableViewCell的xib控件创建xib单元,让后定义xib文件的管理类。为了能让UITabelView识别到xib,需要对xib的Identifier进行设置。可以将UITableView在缓存区寻找的代码放到xib管理类的构造方法中,完成对UITableViewCell定义的封装。
(3) storyboard UITabelView按照重用标识在缓存区寻找需要的Cell时,如果寻找不到,会自动在storyboard当中寻找,因此不需要再storyboard中的cell的管理类自定义构造方法。
2 UICollectionViewCell创建的三种方式:
(1)自定义
- (instancetype)initWithFrame:(CGRect)frame重写父类(UIView)中的构造方法,在其中添加自定义控件。因为使用UICollectionVeiw的缓存区,需要对其Cell类先进行注册,当找到标识时,CollectionView会自动调用Cell类的默认构造方法;
(2)xib 定义xib后,可以直接通过UICollectionView的
- (void)registerNib:(nullable UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier方法自己注册xib,所以不必在xib的管理类中定义构造方法。但是若使用 UICollectionView的
- (void)registerClass:(nullable Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier方法注册时,需要重写xib管理类的父类的
- (instancetype)initWithFrame:(CGRect)frame构造方法;
(3) storyboard 和UITableView类似,UICollectionView在缓存区找不到Cell时,会自动去storyboard中寻找,因此只需要对storyboard中的CollectionCell定义Identifier。
通过自定义代码创建的UITableView和UICollectionView可以根据实际情况灵活设置大小。而通过xib和storyboard创建的cell,布局和控件根据实际情况调整的空间不大。因此当单元内容区别较大时,选用自定义代码较好,反之,可以采用xib和storyboard技术。