最近用到了UICollectionviewCell,系统的Cell不能满足本身的需求,然后开始查找相关资料。UICollectionView是iOS6之后新引进的API,用于展示集合视图,布局更加灵活,其用法类似于UITableView。
使用UICollectionView需要实现UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout这三个协议,这是因为UICollectionViewDelegateFlowLayout实际上是UICollectionViewDelegate的一个子协议,它继承了UICollectionViewDelegate,它的作用是提供一些定义UICollectionView布局模式的函数。
首先从创建collectionView开始,毕竟没有视图cell的效果也看不出来。
一、首先创建一个流水布局cell,设置cell的一些属性
//创建一个流水布局
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
//设置cell的尺寸(宽度和高度)
layout.itemSize = CGSizeMake((RBScreenW-2)/2.0, 250);
//设置竖直滚动放向(默认是竖直方向)
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
//设置cell与cell之间的列距
layout.minimumInteritemSpacing = 1;
//设置cell与cell之间的行距
layout.minimumLineSpacing = 1;
注意:根据自己的需求,自行设置。还有其他属性,自己到头文件查看呗!O(∩_∩)O哈哈~
二、初始化collectionView
//创建UICollectionView
UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];
collectionView.backgroundColor = [UIColor whiteColor];
//添加到视图
[self.view addSubview:collectionView];
collectionView.scrollsToTop = NO;
//开启分页
collectionView.pagingEnabled = YES;
//不显示滚动条
collectionView.showsHorizontalScrollIndicator = NO;
//弹簧效果设置
collectionView.bounces = NO;
//设置代理
collectionView.dataSource = self;
collectionView.delegate = self;
//注册cell
[collectionView registerClass:[RBAttendCell class] forCellWithReuseIdentifier:ID];
注意:这里没有使用xib创建cell,需要使用registerClass: forCellWithReuseIdentifier:方法来注册cell。
三、遵守协议(上面讲了什么协议),实现代理方法。
//设置分组数
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 1;
}
//设置每个分组个数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return self.dataArray.count;
}
//只有新的cell出现的时候才会调用
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
}
当然,在此之前,需要自行创建一个CollectionViewCell继承自UICollectionViewCell。
UICollectionViewCell不需要像UITableViewCell那样判断Cell是否已被创建,这是因为在自定义UICollectionViewCell时有一个极其重要的方法:
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]) {
//添加自己需要个子视图控件
[self setUpAllChildView];
}
return self;
}
最后在数据源方法中添加cell就可以了。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
//只要有新的cell出现,就把对应的数据模型添加到新的cell中
RBAttendCell *cell = (RBAttendCell *)[collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath];
//移除之前的子控制器的view
//[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
RBLiveModel *item = self.dataArray[indexPath.row];
cell.liveItem = item;
return cell;
}
这里使用的数据模型自己设置,或者网络上获取比如微博的数据,直播的数据,解析出部分数据转变成数据模型。显示到collectionView上。