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


这里总结一下collection cell的三种创建方式的相关步骤,原形cellxib,代码;还有对collection view的数据流flowlayout属性与collectionview的头底部view的生成的总结。(读者可根据需要到相关位置查看)


一、原形cell

    1、在storyboardcollection view中拖拉一个系统cell 设定重用标志。

    2、绑定一个继承了UICollectionViewCell的自定义类,拉线,定义模型数据属性之类的。

    3controller中懒加载数据。

    4、使用数据源方法创建组,行,cell

    5、在创建celldatasource的方法中

    //注意这里因为是原形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的自定义类,拉线,定义模型数据属性。

    3controller中懒加载模型数据。

    4、注册cell,说明从指定的xib文件中创建

        创建Nib对象 参数:(1)需要加载的xib文件名

                        2bundle目录,如果是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方法


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

    -(void)layoutSubViews{

        [super layoutSubViews];

        

        /*

            这里对各个控件的frame进行配置

         */

        

    }


    2viewDidLoad中,创建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特有的属性,是描述cellcollectionview中布局的重要属性,可以脱线绑定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;

        

        

    }























你可能感兴趣的:(ios,Objective-C,CollectionView)