天天看点

这里总结一下collection cell的三种创建方式的相关步骤,原形cell,xib,代码;还有对collection view的数据流flowlayout属性与collectionview的头底

这里总结一下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];

        return self;

    }

    2)给.h中的模型属性添加setter方法

    3)layoutSubViews方法(每次collectionView发生变化都会调用一次这个方法,这个方法主要是对子控件做布局用的)

    -(void)layoutSubViews{

        [super layoutSubViews];

    }

    2、viewDidLoad中,创建collectionView对象与UICollectionFlowlayout对象

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];

    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame: self.view.bounds collectionViewLayout:layout];

    [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;

    }