針對于UICollectionView的使用方法與UITableView類似
UICollectionViewLayout
UICollectionViewLayout決定了UICollectionView如何顯示在界面上,Apple提供了一個最簡單的默認layout對象:UICollectionViewFlowLayout。
Flow Layout是一個Cells的線性布局方案,并具有頁面和頁腳。其可定制的內容如下:
itemSize屬性
設定全局的Cell尺寸,如果想要單獨定義某個Cell的尺寸,可以使用下面方法:
-?(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
minimumLineSpacing屬性
設定全局的行間距,如果想要設定指定區內Cell的最小行距,可以使用下面方法:
-?(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
minimumInteritemSpacing屬性
設定全局的Cell間距,如果想要設定指定區內Cell的最小間距,可以使用下面方法:
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
scrollDirection屬性
設定滾動方向,有UICollectionViewScrollDirectionVertical和UICollectionViewScrollDirectionHorizontal兩個值。
headerReferenceSize屬性與footerReferenceSize屬性
設定頁眉和頁腳的全局尺寸,需要注意的是,根據滾動方向不同,header和footer的width和height中只有一個會起作用。如果要單獨設置指定區內的頁面和頁腳尺寸,可以使用下面方法:
-?(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
-?(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
sectionInset屬性
設定全局的區內邊距,如果想要設定指定區的內邊距,可以使用下面方法:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
然后需要實現三種類型的委托:UICollectionViewDataSource, UICollectionViewDelagate和UICollectionViewDelegateFlowLayout
因為UICollectionViewDelegateFlowLayout實際上是UICollectionViewDelegate的一個子協議,它繼承了UICollectionViewDelegate,所以只需要在聲明處寫上UICollectionViewDelegateFlowLayout就行了。
UICollectionViewDataSource
-?(NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView
返回collection view里區(section)的個數,如果沒有實現該方法,將默認返回1
- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section
返回指定區(section)包含的數據源條目數(number of items),該方法必須實現:
- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
返回某個indexPath對應的cell,該方法必須實現:
UICollectionViewCell結構上相對比較簡單,由下至上:
? ? ?a.首先是cell本身作為容器view
? ? ?b. 然后是一個大小自動適應整個cell的backgroundView,用作cell平時的背景
? ? ?c.再其次是selectedBackgroundView,是cell被選中時的背景
? ? ?d.最后是一個contentView,自定義內容應被加在這個view上
為collection view添加一個補充視圖(頁眉或頁腳)
- (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath
設定頁眉的尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section:
設定頁腳的尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section:
添加頁眉和頁腳以前需要注冊類和標識:
- (void)registerClass:(Class)viewClass forSupplementaryViewOfKind:(NSString*)elementKind withReuseIdentifier:(NSString*)identifier:
UICollectionViewDelegateFlowLayout
設定指定Cell的尺寸
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath:
設定collectionView(指定區)的邊距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
設定指定區內Cell的最小行距,也可以直接設置UICollectionViewFlowLayout的minimumLineSpacing屬性
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
設定指定區內Cell的最小間距,也可以直接設置UICollectionViewFlowLayout的minimumInteritemSpacing屬性
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
UICollectionViewDelegate
當指定indexPath處的item被選擇時觸發
- (void)collectionView:(UICollectionView*)collectionView didSelectItemAtIndexPath:(NSIndexPath*)indexPath
注意:當你刪除或添加元素時,一定要更新numberOfItemsInSection的返回情況。
當指定indexPath處的item被取消選擇時觸發,僅在允許多選時被調用
- (void)collectionView:(UICollectionView*)collectionView didDeselectItemAtIndexPath:(NSIndexPath*)indexPath
下面是三個和高亮有關的方法:
-?(BOOL)collectionView:(UICollectionView*)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath*)indexPath
-?(void)collectionView:(UICollectionView*)collectionView didHighlightItemAtIndexPath:(NSIndexPath*)indexPath
-?(void)collectionView:(UICollectionView*)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath*)indexPath
事件的處理順序如下:
? ?a.手指按下
? ?b.shouldHighlightItemAtIndexPath (如果返回YES則向下執行,否則執行到這里為止)
? ?c.didHighlightItemAtIndexPath (高亮)?
? ?d.手指松開
? ?e.didUnhighlightItemAtIndexPath (取消高亮)
? ?f.shouldSelectItemAtIndexPath (如果返回YES則向下執行,否則執行到這里為止)
? ?g.didSelectItemAtIndexPath (執行選擇事件)