这里总结一下collection cell的三种创建方式的相关步骤,原形cell,xib,代码;还有对collection view的数据流flowlayout属性与collectionview的头底部view的生成的总结。(读者可根据需要到相关位置查看)
一、原形cell
1、在storyboard的collection view中拖拉一个系统cell, 设定重用标志。
2、绑定一个继承了UICollectionViewCell的自定义类,拉线,定义模型数据属性之类的。
3、controller中懒加载数据。
4、使用数据源方法创建组,行,cell。
5、在创建cell的datasource的方法中
//注意这里因为是原形cell,所以不需要判断下面这行创建的cell是不是为空,每次创建先去缓存池找有没有标志的cell,如果没有就去找原形cell
自定义类名 *cell = [collectionView dequeReuseIdentifier:@"app" forIndexPath:indexPath];
cell.module属性 = ...
return cell;
二、xib构建collection cell(尤其要注意这里要注册cell)
1、创建一个collection cell xib,添加自定义控件,添加约束。
2、绑定一个继承了UICollectionView cell的自定义类,拉线,定义模型数据属性。
3、controller中懒加载模型数据。
4、注册cell,说明从指定的xib文件中创建
创建Nib对象 参数:(1)需要加载的xib文件名
(2)bundle目录,如果是nil,则默认是mainBundle
viewDidLoad中,UINib *nib = [UINib nibWithNibName:@"nib名字" bundle:nil];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:@"app"];
绑定类 *cell = [[nib instanceWithOwner:nil options:nil] lastObject];
可以创建一个临时cell来设置数据流(后面会说)
5、创建组,行,cell,其中cell的创建方法中:
绑定类 *cell = [collectionView dequeReuseableCellWithReuseIdentifier:@"app" forIndexPath:indexPath];
cell.module属性 = ...
return cell;
三、代码构建collectionView cell
1、自定义一个cell类,继承了UICollectionCell
.h中,有数据模型及各种面向外面的属性
.m中,有类的扩展,里面定义了各种空间的属性
1)控件初始化方法
-(instancetype) initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
/*
这里创建各种类的扩展里面的子控件,设置子控件的各种图片,字,字体,格式等。
之后记住要添加[self.contentView addSubView:各种子view];
*/
return self;
}
2)给.h中的模型属性添加setter方法
3)layoutSubViews方法(每次collectionView发生变化都会调用一次这个方法,这个方法主要是对子控件做布局用的)
-(void)layoutSubViews{
[super layoutSubViews];
/*
这里对各个控件的frame进行配置
*/
}
2、viewDidLoad中,创建collectionView对象与UICollectionFlowlayout对象
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame: self.view.bounds collectionViewLayout:layout];
/*
设置collectionView 和 flowlayout的各种属性(背景什么的,flowlayout的后面说)
*/
[self.view addSubView:collectionView];
同时记住要注册cell,
[self.collectionView registerNib:nib forCellWithReuseIdentifier:@"app"];
3、实现datasource的方法和上面xib的第5步一致
四、flowlayout,是collectionView特有的属性,是描述cell在collectionview中布局的重要属性,可以脱线绑定collectionview的绑定类中:
1、设置itemSize(用于设置cell的属性)
self.flowlayout.itemSize = CGSizeMake(,);
2、设置组的内间距
self.flowlayout.sectionInset = UIEdgeInsetsMake(,,,);
3、设置行间距,与collectionview的滚动方向一致
self.flowlayout.minimumLineSpacing = ...;
4、设置列间距
selfself.flowlayout.minimumLineInteritemSpacing = ...;
5、设置滚动方向,默认是竖直方向上的
self.flowlayout.scrollDirection = UICollectionViewScrollDirection...;
6、设置头底部view的匡高,若竖直则宽无效,若水平,则高无效
self.flowlayout.header/footerReferenceSize = CGSizeMake(,);
7、让组的头部或底部固定在屏幕的四个可视的边界:
self.flowlayout.sectionHeaders/FootersPinToVisibleBounds = BOOL;
五、collectionview会自动创建它的头底部view,当出现在可视化界面的时候,想到如自己创建的头底部view的时候
-(UICollectionViewReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
NSString *kindType = @"header";
if (kindType == UICollectionElementKindSectionFooter){
kindType = @"footer";
}
UICollectionViewReusableView *view = [collectionView dequeReuseableSupplymentaryViewOfKind:kind WithReuseIdentifier:kindType forIndexPath:indexPath];
return view;
}