两者在使用上大致相同,在初始化之后,都会设置相应的数据源和代理,通过重写相应的数据源和代理方法来进行具体操作,现在着重说一下它们的一些小不同:
UITableViewController在初始化后,只要实现它的数据源和代理方法,就可以直接展现出来。而UICollectionViewController推荐使用的是initWithCollectionViewLayout:方法,该中会传入一个layout,只有有了这个layout才能显示出来。或者重写init方法,在init方法中设置它的布局方式,也就是layout.
这个layout可以使用继承自UICollectionViewLayout的两个子类 :UICollectionViewFlowLayout 和 UICollectionViewTransitionLayout。
这里贴一下常用的流水布局的代码:
//1.创建layout
// 1.1创建流水布局
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
// 1.2设置每个格子的尺寸
layout.itemSize = CGSizeMake(thumbnailWidth, thumbnailWidth);
// 1.3设置整个collectionView的内边距
CGFloat paddingY = 20;
layout.minimumInteritemSpacing = minimumItemspace;
layout.sectionInset = UIEdgeInsetsMake(0, minimumLinespace, paddingY, minimumLinespace);
// 1.4设置每一行之间的间距
layout.minimumLineSpacing = minimumLinespace;
两个里面的cell都可以进行重用,但是UICollectionViewCell在初始化时不会传入identifier ,这会导致cell没有identifier可以用于在缓存池中寻找,所以我们需要在ViewDidload方法中注册一个cell,这时它会传入一个identifier,当缓存池中找不到cell时,系统会用注册的cell自动创建一个供使用。如果要注册自己写得类,而该类的视图是从xib文件中生成的,必须注册nib文件。方法如下:
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
<pre name="code" class="objc"> UINib *nib = [UINib nibWithNibName:@"CYLProductItem" bundle:nil];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:reuseIdentifier];
在UITableViewController中,index取出相应组合组中行的两个属性是section和row,而在UICollectionViewController中,index对应的是section和item.