自定义UICollectionViewController…

我们很多时候使用UICollectionView 可能都是直接创建 UICollectionView,通过初始化的时候传入一个布局对象的方式来使用UICollectionView

比如我们之前是这样写得:

UICollectionViewFlowLayo ut *layout = [[UICollectionViewFlowLayo ut alloc] init];
     
UICollectionView *collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
但是有时候这样的方式可能达不到我们的需求,比如我们想利用collectionView 创建一个app的新特性的引导界面这个时候上面这种方式就不适用这个时候 我们就需要自定义UICollectionViewControll er

但是这样的话问题就来了,当我们自定义了UICollectionViewControll er 就无法设置 UICollectionView的布局样式了,因为当我们继承了 UICollectionViewControll er 他内部的UICollectionViewLayout是只读的无法修改

这个时候你可能会说 UICollectionViewControll er 里面不是有个collectionView 吗 ?拿到collectionView 不就可以修改collectionView的布局了吗?当然不行了因为我们现在时自定义了UICollectionViewControll er

我们在使用UICollectionViewControll er 控制器的时候,也就是初始化的时候 就需要为UICollectionViewControll er 传入一个布局对象,不相信是吧?! 下面给你演示下 :我们在viewDidLoad 里面修改collectionView的布局

这个时候一运行程序 你会发现报如下错误:

看到这里 你应该相信我说的了吧,也就是必须在创建collectionViewColler的时候传入布局对象,那么如何解决呢?

这个时候 就是考验我们对创建对象的理解了,我们知道 当我创建一个对象的时候 一般是使用这样的方式:

[[UICollectionViewControll er   alloc] init]

上面的代码做了两件事:

1.在堆区为UICollectionViewControll er开辟一块内存空间

2.调用对象的init方法 做一些初始化的操作

讲到这里聪明的你一定知道怎么做了, 没错 ,就是在 init方法 上面 做手脚 ,我们可以在init方法里面设置UICollectionViewControll er 的布局方式

下面是我的做法:

  - (instancetype)init
  {
      //创建流水布局对象
      UICollectionViewFlowLayo ut *layout = [[UICollectionViewFlowLayo ut alloc] init];
      layout.itemSize =   [UIScreen mainScreen].bounds.size;
     
      //设置水平滚动
      layout.scrollDirection = UICollectionViewScrollDi rectionHorizontal;
       
    //     // 设置cell之间间距
      layout.minimumInteritemSpacing = 0;
      //     // 设置行距
      layout.minimumLineSpacing = 0;
     
      return [super initWithCollectionViewLa yout:layout];
  }
这样我们一创建 UICollectionViewControll er 的时候默认就会由流水布局的样式了

另外附上在viewdidload里边注册cell的几种方法,仅供参考使用:
如果采用如下3种方式,为UICollectionViewControll er(UITableViewController)注册了原形Cell,系统会用注册的cell作为显示用的cell和可重用cell,一旦缓冲区中不存在可重用cell,系统会使用注册的原形Cell新实例化一个Cell供程序使用!
      因此只要注册了原形Cell,创建cell时就不再需要cell == nil的判断了。
      */

    //1.纯代码自定义的cell注册如下:
    [self.collectionView registerClass:[HMStatusCell class] forCellReuseIdentifier:ID];

    //2. 使用Xib自定义的cell,注册如下
      [self.collectionView registerNib:[UINib nibWithNibName:@"WZUserCell" bundle:nil] forCellReuseIdentifier:UserCellId];
     
    //3. 使用Storyboard创建ProtoCell,只需设置ProtoCell的reuseIdentifier,系统自动注册。
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值