iOS流佈局UICollectionView系列二——UICollectionView的代理方法

iOS流佈局UICollectionView系列二——UICollectionView的代理方法

1、引言

        在上一篇博客中,介紹了最基本的UICollectionView的使用和其中咱們經常使用的屬性和方法,也介紹了瀑布流佈局的過程與思路,這篇博客是上一篇的補充,來討論關於UICollectionView的代理方法的使用。博客地址:佈局

UICollectionView的簡介和簡單使用:http://my.oschina.net/u/2340880/blog/522613測試

2、UICollectionViewDataSource協議

        這個協議主要用於collectionView相關數據的處理,包含方法以下:spa

首先,有兩個方法是咱們必須實現的:.net

設置每一個分區的Item個數代理

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;code

 

設置返回每一個item的屬性orm

 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;blog

 

下面的方法是可選實現的:element

雖然這個方法是可選的,通常咱們都會去實現,設置分區數get

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

對頭視圖或者尾視圖進行設置

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

 

設置某個item是否能夠被移動,返回NO則不能移動

 

- (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0);

 

移動item的時候,會調用這個方法

 

- (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath;

3、UICollectionViewDelegate協議

        這個協議用來設置和處理collectionView的功能和一些邏輯,全部方法都是可選實現:

是否容許某個Item的高亮,返回NO,則不能進入高亮狀態

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

 

當item高亮時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

 

結束高亮狀態時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath;

 

是否能夠選中某個Item,返回NO,則不能選中

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath;

 

是否能夠取消選中某個Item

- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

 

已經選中某個item時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

 

取消選中某個Item時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

 

將要加載某個Item時調用的方法

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

 

將要加載頭尾視圖時調用的方法

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

 

已經展現某個Item時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath;

 

已經展現某個頭尾視圖時觸發的方法

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;

 

這個方法設置是否展現長按菜單

- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath;

長按菜單中能夠觸發一下類複製粘貼的方法,效果以下:

 

 

這個方法用於設置要展現的菜單選項

- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender;

 

這個方法用於實現點擊菜單按鈕後的觸發方法,經過測試,只有copy,cut和paste三個方法能夠使用

- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender;

經過下面的方式能夠將點擊按鈕的方法名打印出來:

-(void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{
    NSLog(@"%@",NSStringFromSelector(action));
}

 

collectionView進行從新佈局時調用的方法

- (nonnull UICollectionViewTransitionLayout *)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout;

 

專一技術,熱愛生活,交流技術,也作朋友。

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索