iOS開發之UICollectionViewController

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);

}

4UICollectionViewController必須調用的方法

(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方法中建立。

5UICollectionViewFlowLayout

UICollectionViewFlowLayout稱爲」流水佈局」, 用來約束cell的顯示。

常見屬性:

Cell的尺寸:

@property (nonatomic) CGSize itemSize;

 

cell之間的水平間距:

@property (nonatomic) CGFloat minimumInteritemSpacing;

 

cell之間的垂直間距:

@property (nonatomic) CGFloat minimumLineSpacing;

 

四周的內邊距:

@property (nonatomic) UIEdgeInsets sectionInset;

相關文章
相關標籤/搜索