天天看點

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

之前用collectionviewcontroller隻是皮毛,一些ios從入門到精通的書上也是泛泛而談。這幾天好好的搞了搞蘋果的開發文檔上collectionviewcontroller的内容,親身體驗了一下collectionviewcontroller的強大,之前一直認為collectionview和tableview用法差不多,功能應該也是類似的。tableview的功能就已經很強大了,,collectionview就是tableview的更新版,其功能更為強大。以後的幾篇部落格中好好的研究一下collectionview,由淺入深,層層深入,搞透collectionview這個強大的元件。在一些開源社群上分享的效果比較炫的代碼,有不少是使用uicollectionview做的,uicollectionviewcontroller是很實用的,很有必要好好的搞一下。

  一. collectionviewcontroller簡介

  uicollectionviewcontroller說白了就是一個uiviewcontroller + uicollectionview = uicollectionviewcontroller。 這一點和uitableviewcontroller是一樣一樣的。

  

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

  1.繼承關系

  由上圖可知,uicollectionviewcontroller的父親(父類)是uiviewcontroller, 而uiviewcontroller的父親是uiresponder,uiresponder繼承自nsobject。這個繼承關系和uitableviewcontroller是一樣一樣的, 也就是說uicollectionviewcontroller和uitableviewcontroller是兄弟或者姐妹關系。這樣比的話他倆就親近多了。

  2.遵循的一些協定

  uicontentcontainer 是ios8之後添加的新的協定,也是和size class相關的協定。該協定中的方法可以幫助你适配視圖控制器上的内容,比如内容尺寸和位置等。

  3. 由上面可知uicollectionviewcontroller是ios6以後推出的東西,相對起來還是比較新的。

  二. uicollectionviewcontroller的實作行為

  1. 如果你的集合視圖控制器與nib檔案或者storyboard進行了綁定,那麼他的視圖将會從nib檔案或者storybaord中進行加載。如果你是使用程式設計的方式來建立集合視圖控制器,那麼将會自動建立一個已經配置好的collection view, 而這個collection view可以通過collectionview來進行通路。

  2.當從nib檔案或者storyboard中加載集合視圖時,集合視圖的資料源(data source)和代理對象(delegate object)是從nib或者storyboard中擷取的。如果data source 或者 delegate沒有被指定的話,collection view将會自動指派一個未知的對象。

  3.當集合視圖首次出現時會重新加載上面的資料。當視圖每次顯示時,也會清除目前的選擇。不過你可以把屬性clearsselectiononviewwillappear設定成no來改變這種行為。

  你可以建立一個自定義的uicollectionviewcontroller子類來管理你的集合視圖。當你初始化視圖控制器時,你可以使用initwithcollectionviewlayout:方法來指定集合視圖想要使用的布局方式。因為剛建立集合視圖是沒有尺寸或者内容的,data source和delegate是一個典型集合視圖中所必須的資訊。

  你可以重寫loadview或者其他超類中的方法,但是如果你這樣做, 你必須確定在你實作的方法中使用super調用了超類中相應的方法。如果你沒有這麼做,集合控制器有可能沒有執行所有需要執行的任務來保證集合視圖的完整。

  三.簡單集合視圖控制器建立

    1.初始化uicollectionviewcontroller對象

    使用initwithcollectionviewlayout: 方法來初始化uicollectionviewcontroller的對象,該方法可以初始化和根據提供的布局來配置集合視圖。布局會控制集合視圖上的單元格(cell)的排列方式。預設的是flow layout.

    

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

    2. 使用storyboard建立一個collectionviewcontroller

    (1) 從控件庫中拖拽出collection view controller ,你可以在cell上添加一個imageview, 并且添加上圖檔,這樣看起來也漂亮一些。你也可以給cell設定一個背景色便于區分。

             

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

    (2) 設定cell的預設寬高,具體如下圖所示

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

    (3) 設定cell的重用标示符為"cell"這個我們要在代碼中使用

      

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

    (4) 給集合視圖控制器關聯代碼,并設定storyboard id

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

    3.在代碼中實作相應的代理,和tableview非常類似

    (1) 傳回section個數的方法

    (2) 傳回每個section中cell個數的方法

    (3) 通過cell重用标示符來選擇和重用cell

  通過上面的步驟一個簡單collectionview就可以運作起來了,最終運作效果如下所示:

iOS開發之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

  今天這篇部落格的内容算開個頭,後邊回由淺入深,慢慢更新部落格。今天就是一個ready的過程,下篇部落格将會基于今天這個工程介紹其他的關于uicollectionview的東西,如uicollectionviewlayout等,來逐漸領略uicollectionviewcontroller的魅力。

繼續閱讀