天天看點

iOS開發之窺探UICollectionViewController(二) --詳解CollectionView各種回調

  uicollectionview的布局是可以自己定義的,在這篇部落格中先在上篇部落格的基礎上進行擴充,我們先使用uicollectionviewflowlayout,然後好好的介紹一下uicollectionview的一些回調方法,主要包括uicollectionviewdatasource,uicollectionviewdelegateflowlayout,uicollectionviewdelegate相關回調方法,并通過執行個體來介紹每個回調的用法。并且給每個section添加定制的header和footer,好廢話少說進入今天的正題。

  一、demo總覽

  下圖是本篇部落格中demo的最終運作效果,下面是我們要做的事情:

    1. 給每個section添加自定義的重用header和footer

    2.調整第一個section的上左下右的邊距(uiedgeinsets)

    3.給uicollectioinview設定多選

    4.處理cell的高亮事件

    5.處理cell的選中事件

    6.調整cell的上下左右邊距

    7.對cell進行編輯

                   

iOS開發之窺探UICollectionViewController(二) --詳解CollectionView各種回調

  二、uicollectionviewdatasource介紹

    1、在uicollectionviewdatasource回調方法中有一個傳回section數量的方法,如下所示,該方法和uitableview中的用法一緻。在這兒我們傳回5個section,如下所示:

    2、在uicollectionviewdatasource的回調方法中,還有一個是傳回每個section中cell的數量的方法,在這我們傳回30個cell, 如下代碼所示:

    3、在uicollectionviewdatasource還有一個必須實作的方法, 就是選擇我們collectionview中所使用的cell, 在這裡我們所使用的cell是在storyboard上實作的,是以不需要在我們的代碼中注冊cell, 之間使用重用标示符就可以擷取cell的對象,如下所示:

    4、在uicollectionviewdatasource方法中有一個可選的方法就是為我們的section添加supplementary view(追加視圖),下面是添supplementary view(追加視圖)的步驟。在uicollectionview中的section中我們可以為其增加header view和footer view, 也就是官方文檔上提到的supplementary view(追加視圖)。追加視圖是可以重用的,也就是uicollectionreusableview。我們可以建立兩個uicollectionreusableview的子類,一個是header view, 另一個是footer view。

    (1)建立uicollectionreusableview

    追加視圖可以在storyboard上添加,然後設定重用标示符,在代碼中使用即可。這裡我們是從xib檔案來加載的supplementary view, 先建立兩個uicollectionreusableview子類,在建立該子類的同時建立相應的xib檔案,如下所示:

iOS開發之窺探UICollectionViewController(二) --詳解CollectionView各種回調

    建立header view和footer view的uicollectionreusableview,建立後的檔案目錄如下:

iOS開發之窺探UICollectionViewController(二) --詳解CollectionView各種回調

    (2) 因為我們是從xib檔案中加載的uicollectionreusableview,是以需要在相應的uicollectionview上進行注冊。如果你是使用的storyboard, 隻需要在storyboard中指定重用标示符即可。下面的代碼就是在viewdidload中調用注冊uicollectionreusableview的方法。

    (3)在uicollectionviewdatasource中的設定supplementary view的方法中通過header view和footer view的重用标示符來為我們的section設定supplementary view,具體代碼如下所示:

   uicollectionviewdatasource中的四個方法在上面都進行了實作,uicollectionviewdatasource主要是負責加載資料源的,包括section的個數,每個section中cell的個數,每個section中supplementary view的種類。

  三.uicollectionviewdelegateflowlayout回調實作

    uicollectionviewdelegateflowlayout主要是負責顯示的,比如secion的大小、邊距,cell的大小邊距,headerview的大小已經footerview的大小,都是在uicollectionviewdelegateflowlayout的相應協定的方法來實作的。接下來詳細的介紹一下uicollectionviewdelegateflowlayout協定中的方法。

    1.同一個section中同一種cell(通過同一個cell重用标示符擷取的對象)可以有不同的尺寸,下面的代碼是給cell定制尺寸。代碼的具體意思是第一個section中的所有cell的尺寸是(50,50)。 其餘的時(60,60)。

    2.改變section的上下左右邊距--uiedgeinsetsmake(上, 左, 下, 右),逆時針旋轉。第一個section的上左下右的邊距都是50, 其餘的section上左下右的邊距是0。具體實作看如下代碼:

  

    3.設定每個cell的上下邊距的回調如下所示,第一個section的cell上下邊距是5.0f, 其餘的為20.0f。

    4.設定cell的左右邊距,第一個section的cell左右邊距是5.0f, 其餘的為20.0f。

    5.設定header view和footer view的大小的回調如下。

    上面的方法就是uicollectionviewdelegateflowlayout中所有的方法了,負責布局顯示的。

  四、uicollectionviewdelegate回調實作

    uicollectionviewdelegate中的代理方法主要是負責cell的互動的,比如是否高亮,是否選,是否可編輯等,接下來要為大家詳細的介紹uicollectionviewdelegate中的代理方法。

    1.為了這部分的效果展示,我們需要對cell添加一些控件,并且設定其highlight和selected的一些狀态。為cell添加上imageview, cell的高亮狀态和非高亮狀态對應的imageview上的圖檔是不同的。再添加一個button, 并為button設定selected和default狀态下的圖檔,button的選中和預設狀态由cell的選中狀态來定。cell中改變imageview的圖檔的代碼如下所示,函數傳入的參數是目前cell的高亮狀态,根據高亮狀态來設定imageview上的image。(有的小夥伴會問為什麼給imageview在default狀态和highlight下設定不同的圖檔,然後直接改變imageview的高亮狀态即可。你可以試一下,達不到預期的效果)

    2.設定cell可以高亮, 傳回yes代表cell可以高亮,傳回no代表cell不可高亮。高亮就是觸摸cell時該cell變為高亮狀态,在代碼中的反應就是cell的highligth屬性變為yes。而觸摸結束時,cell的highligth屬性就變為no。

    3.下面這個方法是自己寫的,用來在界面上反應cell的高亮狀态。 imageview在目前cell高亮狀态下和非高亮狀态下所加載的圖檔不同,是以可以看出cell高亮和非高亮。

  4.cell從非高亮變為高亮狀态時回調用下面的方法,為了反映cell的高亮狀态,我們去改變一下cell上imageview的圖檔。

    5.設定cell是否可選的回調如下所示,cell被選中時該cell的selected為yes, 取消選中selected為no;

    6. 如果想讓你的cell支援多選,就需要設定一下collectionview的allowsmultipleselection屬性,下面的代碼是在viewdidload中添加的,如下所示:

    7.如果在多選狀态下需要支援取消cell的多選,那麼就去執行下面的方法,并傳回yes。就是支援在多選狀态下取消選中狀态。

    8.下面這個方法是自己封裝的,用來根據cell的選中狀态來改變cell上button的選中狀态,具體代碼實作如下:

    9.在cell選中和取消選中時都會調用上面的方法來改變button的選中狀态,下面是cell在選中時以及取消選中時所調用的方法:

    10.下方四個方法是cell将要出現,cell出現後,supplementary view将要出現以及supplementary view已經出現所調用的方法,具體資訊請看下方代碼實作:

 在uicollectionviewdelegate回調方法中還有三個回調方法是關于cell編輯的,比如copy, past, cut等操作,具體代碼就不在此贅述了。在demo中給出了實作方式,主要涉及到uipasteboard的操作,本篇部落格的整體的demo回分享到github上,下方是github上的分享連結,感興趣的小夥伴可以進行clone。

繼續閱讀