1、先看两者比较的效果图
2、特点:
2.1、都继承自UIScrollView,因此这两者可以说是兄弟关系,都是用于数据展示方面都是非凡的表现,并且UICollectionView自iOS6以来才支持;
2.2、Collection View的整体构成元素,共有三个要素,分别如下
- Cells(单元格)
- Supplementary Views(补充的view,相当于TableView的页眉和页脚)
- Decoration Views(装饰View,用于装饰整个CollectionView的
2.3、数据模型(数据提供者UICollectionViewDataSource),主要功能:
- Section数目
- Section里面有多少item
- 提供Cell和supplementary view设置
分别为:
1 2 3 4 5 | numberOfSectionsInCollectionView: collectionView:numberOfItemsInSection: collectionView:cellForItemAtIndexPath: |
2.4、Cell和View的重用
在iOS6中,Cell重用改善,我们可以更加方便的使用Cell,系统总是为我们初始化Cell。我们可以直接使用。只需要简单的按照两步走即可:
1) 必须使用下面的方法进行Cell类的注册:
1 2 3 4 5 6 7 | - (void)registerClass:forCellWithReuseIdentifier: - (void)registerClass:forSupplementaryViewOfKind:withReuseIdentifier: - (void)registerNib:forCellWithReuseIdentifier: - (void)registerNib:forSupplementaryViewOfKind:withReuseIdentifier: |
2) 从队列中取出一个Cell,具体方法如下:
1 2 3 | -(id)dequeueReusableCellWithReuseIdentifier:forIndexPath: -(id)dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: |
2.5、界面布局
collectionView与tableView最大的不同点就在于此,collectionView必须要使用自己的layout(UICollectionViewLayout)
如:
1 2 3 4 5 | UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; flowLayout.itemSize = CGSizeMake(52, 52); // cell大小 flowLayout.minimumInteritemSpacing = 1; // cell间距 flowLayout.minimumLineSpacing = 1; // cell行距 flowLayout.sectionInset = (UIEdgeInsets){81,1,1,1}; // cell边距 |
创建collectionView需要带Layout的初始化方法:
1 | - (id)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout; |
3、示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | // // CarLicenseView.m // RouteMapInformation // // Created by yusian on 14-5-29. // Copyright (c) 2014年 yusian. All rights reserved. // #import "CarLicenseView.h" /****************************Cell定义*********************************/ @interface SALicenseCell : UICollectionViewCell @property (nonatomic, strong) UILabel *label; @end @implementation SALicenseCell - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // 键盘文字设置 self.label = [[UILabel alloc] init]; self.label.backgroundColor = [UIColor clearColor]; // 透明颜色 self.label.textAlignment = NSTextAlignmentCenter; // 文字居中 self.label.frame = CGRectMake(0, 0, 52, 52); // 位置大小 self.label.font = [UIFont systemFontOfSize:20]; // 文字大小 self.backgroundColor = [UIColor whiteColor]; // 背景颜色 [self.contentView addSubview:self.label]; } return self; } + (NSString *)ID { return @"licenseCellID"; } @end /****************************Cell定义*********************************/ @interface CarLicenseView () <UICollectionViewDataSource, UICollectionViewDelegate, UIAlertViewDelegate> @end @implementation CarLicenseView #pragma mark 界面初始化 - (id)initWithFrame:(CGRect)frame { // 1、键盘按钮布局 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; flowLayout.itemSize = CGSizeMake(52, 52); // 按键大小 flowLayout.minimumInteritemSpacing = 1; // 按键间距 flowLayout.minimumLineSpacing = 1; // 按键行距 flowLayout.sectionInset = (UIEdgeInsets){81,1,1,1}; // 按键边距 // 2、键盘附加视图 self = [super initWithFrame:frame collectionViewLayout:flowLayout]; if (self) { // 键盘背景色 self.backgroundColor = [UIColor colorWithWhite:0.9 alpha:0.8]; } // 3、注册按钮类(内部处理机制) [self registerClass:[SALicenseCell class] forCellWithReuseIdentifier:[SALicenseCell ID]]; self.delegate = self; self.dataSource = self; return self; } #pragma mark 界面绘制方法 #pragma mark 键盘按键数目 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 30; } #pragma mark 键盘按键文字 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { SALicenseCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[SALicenseCell ID] forIndexPath:indexPath]; cell.backgroundColor = [UIColor blueColor]; return cell; } @end |