求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
iOS开发- UICollectionView详解+实例
 
火龙果软件    发布于 2014-04-15
 

本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView。

UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView 和 UITableViewController 类。

使用UICollectionView 必须实

UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout这三个协议。

下面先给出常用到的一些方法。(只给出常用的,其他的可以查看相关API)

1.#pragma mark -- UICollectionViewDataSource   

1.//定义展示的UICollectionViewCell的个数  
2.-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
3.{
4. return 30;
5.}


1.//定义展示的Section的个数  
2.-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
3.{
4. return 1;
5.}


1.//每个UICollectionView展示的内容  
2.-(UICollectionViewCell *)collectionView:(UICollectionView *) collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
3.{
4. static NSString * CellIdentifier = @"GradientCell";
5. UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
6.
7. cell.backgroundColor = [UIColor colorWithRed:((10 * indexPath.row) / 255.0) green:((20 * indexPath.row)/255.0) blue:((30 * indexPath.row)/255.0) alpha:1.0f];
8. return cell;
9.}


1.#pragma mark --UICollectionViewDelegateFlowLayout   

1.//定义每个UICollectionView 的大小  
2.- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout* )collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
3.{
4. return CGSizeMake(96, 100);
5.}


1.//定义每个UICollectionView 的 margin  
2.-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout * )collectionViewLayout insetForSectionAtIndex:(NSInteger)section
3.{
4. return UIEdgeInsetsMake(5, 5, 5, 5);
5.}


1.#pragma mark --UICollectionViewDelegate   

1.//UICollectionView被选中时调用的方法  
2.-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
3.{
4. UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
5. cell.backgroundColor = [UIColor whiteColor];
6.}

1.//UICollectionView被选中时调用的方法  
2.-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
3.{
4. UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
5. cell.backgroundColor = [UIColor whiteColor];
6.}

1.//UICollectionView被选中时调用的方法  
2.-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
3.{
4. UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
5. cell.backgroundColor = [UIColor whiteColor];
6.}

1.//返回这个UICollectionView是否可以被选择  
2.-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath  
3.{  
4.    return YES;  
5.} 

下面通过一个例子具体介绍下。(例子来自网络。但是是通过第三方获得的,无法取得链接。还望见谅。)

iOS CollectionView的出现是一大福利,再也不用用TableView来定义复杂的多栏表格了,用法与Table类似,只是Cell必须自己添加,无默认模式

由于CollectionView没有默认的Cell布局,所以一般还是自定义方便又快捷

一、自定义Cell

1、新建类CollectionCell继承自UICollectionViewCell

2、新建Xib,命名为CollectionCell.xib

a.选中CollectionCell.xib删掉默认的View,从控件中拖一个Collection View Cell(图3)到画布中,设置大小为95*116;

b.选中刚刚添加的Cell,更改类名为CollectionCell,如图4

c.在CollectionCell.xib的CollectionCell中添加一个ImageView和一个Label(图5)

d.创建映射, 图6,图7

e.选中CollectionCell.m , 重写init方法

1.- (id)initWithFrame:(CGRect)frame  
2.{
3. self = [super initWithFrame:frame];
4. if (self)
5. {
6. // 初始化时加载collectionCell.xib文件
7. NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"CollectionCell" owner:self options:nil];
8.
9. // 如果路径不存在,return nil
10. if (arrayOfViews.count < 1)
11. {
12. return nil;
13. }
14. // 如果xib中view不属于UICollectionViewCell类,return nil
15. if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]])
16. {
17. return nil;
18. }
19. // 加载nib
20. self = [arrayOfViews objectAtIndex:0];
21. }
22. return self;
23.}

f.选中CollectionCell.xib 修改其identifier为CollectionCell。

二、定义UICollectionView;

1、拖动一个Collection View到指定ViewController的View上

2、连线dataSource和delegate,并创建映射,命名为CollectionView

3、选中CollectionView的标尺,将Cell Size的Width和Height改成与自定义的Cell一样的95*116,图8

4、选中CollectionView的属性,可以修改其属性,比如是垂直滑动,还是水平滑动,选择Vertical或Horizontal

5、选中CollectionViewCell,修改Class,继承自CollectionCell

6、在ViewDidLoad方法中声明Cell的类,在ViewDidLoad方法中添加,此句不声明,将无法加载,程序崩溃

其中,CollectionCell是这个Cell的标识(之前几步已经定义过了。 )

1.[self.collectionView registerClass:[CollectionCell class] forCellWithReuseIdentifier:@"CollectionCell"];  

7、在ViewController.h中声明代理

1.@interface ViewController : UIViewController<UICollectionViewDataSource,UICollectionViewDelegate>  

8、在.m文件中实现代理方法

1.//每个section的item个数  
2.-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
3.{
4. return 12;
5.}
6.
7.-(UICollectionViewCell *)collectionView:(UICollectionView *) collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
8.{
9.
10. CollectionCell *cell = (CollectionCell *) [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionCell" forIndexPath:indexPath];
11.
12. //图片名称
13. NSString *imageToLoad = [NSString stringWithFormat:@"%d.png", indexPath.row];
14. //加载图片
15. cell.imageView.image = [UIImage imageNamed:imageToLoad];
16. //设置label文字
17. cell.label.text = [NSString stringWithFormat:@"{%ld,%ld}",(long)indexPath.row,(long)indexPath.section];
18.
19. return cell;
20.}

9 效果如图10

点击某项后跳转事件与UITableView类似,实现代理方法

1.-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath  

即可,不赘述

 
相关文章

手机软件测试用例设计实践
手机客户端UI测试分析
iPhone消息推送机制实现与探讨
Android手机开发(一)
 
相关文档

Android_UI官方设计教程
手机开发平台介绍
android拍照及上传功能
Android讲义智能手机开发
相关课程

Android高级移动应用程序
Android系统开发
Android应用开发
手机软件测试
 
分享到
 
 


android人机界面指南
Android手机开发(一)
Android手机开发(二)
Android手机开发(三)
Android手机开发(四)
iPhone消息推送机制实现探讨
手机软件测试用例设计实践
手机客户端UI测试分析
手机软件自动化测试研究报告
更多...   


Android高级移动应用程序
Android应用开发
Android系统开发
手机软件测试
嵌入式软件测试
Android软、硬、云整合


领先IT公司 android开发平台最佳实践
北京 Android开发技术进阶
某新能源领域企业 Android开发技术
某航天公司 Android、IOS应用软件开发
阿尔卡特 Linux内核驱动
艾默生 嵌入式软件架构设计
西门子 嵌入式架构设计
更多...