1、概述android
UICollectionView控件主要是用來作九宮格的,相似於android中的GridView控件。其用法與UITableView同樣,首先要使控制器遵照數據源協議,再將控制器設置爲UICollectionView的數據源。一樣,控制器遵照了UICollectionView的代理後也能夠實現代理方法等。緩存
2、經常使用的數據源方法佈局
設置UICollectionViewController一共有多少組:atom
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView代理
*)collectionView;事件
設置每組有多少單元格:ci
- (NSInteger)collectionView:(UICollectionView *)collectionViewit
numberOfItemsInSection:(NSInteger)section;io
設置每一個單元格顯示的內容:class
- (UICollectionViewCell *)collectionView:(UICollectionView
*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
3、經常使用的代理方法
設置每一個單元格點擊事件:
- (void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
MJProduct *p = self.products[indexPath.item];
NSLog(@"點擊了---%@", p.title);
}
4、UICollectionViewController必須調用的方法
(1)註冊cell(告訴collectionView未來建立怎樣的cell)
[self.collectionView registerClass:[UICollectionViewCell class]
forCellWithReuseIdentifier:@"product"];
在調用- (UICollectionViewCell *)collectionView:(UICollectionView
*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;設置每一個單元格顯示的內容(UICollectionViewCell)以前必須註冊cell,通常在viewDidLoad中調用上面方法註冊cell。
例如:
- (void)viewDidLoad
{
[super viewDidLoad];
// 1.註冊cell(告訴collectionView未來建立怎樣的cell)
UINib *nib = [UINib nibWithNibName:@"MJProductCell" bundle:nil];
[self.collectionView registerNib:nib forCellWithReuseIdentifier:
MJProductCellID];//經過xid自定義的cell
/*
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:MJProductCellID];//使用默認的UICollectionViewCell
*/
// 2.設置collectionView的背景色
self.collectionView.backgroundColor = [UIColor whiteColor];
}
(2)從緩存池中取出cell
- (UICollectionViewCell *)collectionView:(UICollectionView
*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell =
[collectionView dequeueReusableCellWithReuseIdentifier:@"product" forIndexPath:indexPath];
return cell;
}
在從緩存池取UICollectionViewCell重用時,不用再判斷緩存池是否爲空了,它與UITableView不一樣的是UICollectionView在緩存池沒有找到cell時會自動建立新的cell。
(3)重寫init方法,建立佈局參數
- (id)init
{
// 1.流水佈局
UICollectionViewFlowLayout *layout =
[[UICollectionViewFlowLayout alloc] init];
// 2.每一個cell的尺寸
layout.itemSize = CGSizeMake(80, 80);
// 3.設置cell之間的水平間距
layout.minimumInteritemSpacing = 0;
// 4.設置cell之間的垂直間距
layout.minimumLineSpacing = 10;
// 5.設置全部cell組成的一個總體與屏幕(ViewController)四周距離
layout.sectionInset =
UIEdgeInsetsMake(layout.minimumLineSpacing, 0, 0, 0);
return [super initWithCollectionViewLayout:layout];
}
若是不建立佈局參數程序會報錯。通常在重寫控制器的init方法中建立。
5、UICollectionViewFlowLayout
UICollectionViewFlowLayout稱爲」流水佈局」, 用來約束cell的顯示。
常見屬性:
Cell的尺寸:
@property (nonatomic) CGSize itemSize;
cell之間的水平間距:
@property (nonatomic) CGFloat minimumInteritemSpacing;
cell之間的垂直間距:
@property (nonatomic) CGFloat minimumLineSpacing;
四周的內邊距:
@property (nonatomic) UIEdgeInsets sectionInset;