UICollectionView(I)

Posted echohg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UICollectionView(I)相关的知识,希望对你有一定的参考价值。

UICollectionView 与 UITableView的异同

 相同点:

 

不同点:

① 动过代理和数据源方法来实现UI和数据填充的;

② 对Cell的重利用,实现了循环利用优化;

 

不同点:

① UITableView是系统自定义的竖直布局,只能竖直滚动,UICollectionView可以自由选择竖直布局和水品布局,分别为竖直滚动和水平滚动;

② UITableViewController的self.view == self.tableview;,但UICollectionViewController的self.view != self.collectionView;

③ UICollectionView的cell只能通过注册来确定重用标识符;

 

 

属性

滚动方向属性scrollDirection:

 1 //垂直滚动,表示Cell布局是从左往右,从上到下排列的布局
 2 //水平滚动,表示Cell方块布局是从上往下,从左到右排列的布局
 3 typedef NS_ENUM(NSInteger, UICollectionViewScrollDirection) {     
 4     UICollectionViewScrollDirectionVertical,  /*垂直滚动*/  
 5     UICollectionViewScrollDirectionHorizontal /* 水平滚动 */
 6 };
 7 
 8 
 9 //和UITableView不同,UICollectionView只能在这里设置顶部视图和底部视图的大小
10 
11 //设置为垂直滚动时,顶部和底部视图的宽度为UICollectionView的宽度,无法设置
12 
13 //设置为水平滚动时,顶部和底部视图的高度为UICollectionView的高度,无法设置

 

 

 

常用方法

 1 //向容器视图注册Cell视图,有2种方式,一种是类名注册,一种是Xib注册 
 2 - (void)registerClass:(Class)cellClass /* 视图类*/    forCellWithReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
 3 
 4 - (void)registerNib:(UINib *)nib /* Xib */    forCellWithReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
 5 
 6 //从缓存池中取出Cell视图对象,如果缓存池没有,自动调用alloc/initWithFrame创建
 7 - (UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier     forIndexPath:(NSIndexPath *)indexPath;
 8 
 9 //kind参数设置
10 NSString *const    UICollectionElementKindSectionHeader;/* 顶部视图用这个 */
11 NSString *const    UICollectionElementKindSectionFooter;/* 底部视图用这个 */
12 
13 
14 //向容器视图注册顶部视图或者底部视图,有2种方式,一种是类名注册,一种是Xib注册
15 - (void)registerClass:(Class)viewClass 
16         forSupplementaryViewOfKind:(NSString *)kind /* 参考上面 */    withReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
17 
18 - (void)registerNib:(UINib *)nib    forSupplementaryViewOfKind:(NSString *)kind /* 参考上面 */    withReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
19 
20 /* 从缓存池中取出顶部视图对象或者底部视图对象,如果缓存池没有,自动调用alloc/initWithFrame创建 */
21 - (UICollectionReusableView *)dequeueReusableSupplementaryViewOfKind:(NSString *)kind    withReuseIdentifier:(NSString *)identifier     forIndexPath:(NSIndexPath *)indexPath;    

 

 

 

UICollectionViewDelegate的代理方法

1 // 选中Cell方块时调用
2 - (void)collectionView:(UICollectionView *)collectionView    didSelectItemAtIndexPath:(NSIndexPath *)indexPath;
3 
4 //取消选中Cell方块时调用
5 - (void)collectionView:(UICollectionView *)collectionView    didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

 

 

UICollectionViewDataSource数据源方法

 1 @required
 2 //设置容器视图各个组都有多少个Cell
 3 - (NSInteger)collectionView:(UICollectionView *)collectionView    numberOfItemsInSection:(NSInteger)section;
 4 
 5 //设置Cell,类似于UITableViewCell的设置 
 6 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView    cellForItemAtIndexPath:(NSIndexPath *)indexPath;
 7 
 8 
 9 @optional
10 //容器视图有多少个组,默认返回1
11 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;
12 
13 //设置顶部视图和底部视图,通过kind参数分辨是设置顶部还是底部
14 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView    viewForSupplementaryElementOfKind:(NSString *)kind    atIndexPath:(NSIndexPath *)indexPath;

 

 

UICollectionViewDelegateFlowLayout的代理布局方法

1 // 设置每个方块的尺寸大小
2 - (CGSize)collectionView:(UICollectionView *)collectionView    layout:(UICollectionViewLayout*)collectionViewLayout    sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
3 
4 //设置方块视图和边界的上下左右间距
5 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView    layout:(UICollectionViewLayout*)collectionViewLayout    insetForSectionAtIndex:(NSInteger)section;

 

 看图示:

技术分享图片

 

以上是关于UICollectionView(I)的主要内容,如果未能解决你的问题,请参考以下文章

这个代码片段究竟做了啥?

以下代码片段的算法复杂度

vs 2010代码片段

vs 2010代码片段

这个代码片段有啥作用?

js 常用代码片段