ios UICollectionView


針對于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 (執行選擇事件)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容