1. 程式人生 > >iOS開發之窺探UICollectionViewController(一) :Ready Your CollectionViewController

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

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

一. CollectionViewController簡介

UICollectionViewController說白了就是一個UIViewController + UICollectionView = UICollectionViewController。 這一點和UITableViewController是一樣一樣的。

1.繼承關係

由上圖可知,UICollectionViewController的父親(父類)是UIViewController, 而UIViewController的父親是UIResponder,UIResponder繼承自NSObject。這個繼承關係和UITableViewController是一樣一樣的, 也就是說UICollectionViewController和UITableViewController是兄弟或者姐妹關係。這樣比的話他倆就親近多了。

2.遵循的一些協議

這些協議也和UITableViewController遵循的協議類似,常用的還是UICollectionViewDataSource(資料來源)和UICollectionViewDelegate(委託代理), 上面這兩個常用的協議就不多說了和UITableViewController的用法類似。

UITraitEnvironment 是iOS8以後才引入的新的協議介面,它和Size Class有關,這個類封裝了像水平和豎直方向的Size Class等資訊,iOS8的UIKit中大多數UI的基礎類(包括都實現了UITraitEnvironment這個介面,可以通過這個介面來做一些控制元件顯示,螢幕適配等一些工作。

UIContentContainer 是iOS8之後新增的新的協議,也是和Size Class相關的協議。該協議中的方法可以幫助你適配檢視控制器上的內容,比如內容尺寸和位置等。

(iOS8的新特性,在這兒不做過多介紹)’象為該協議提供預設的實現方法。當建立自定義檢視控制器或者展示控制器時,你可以重寫預設的實現方法來調整你檢視控制器的內容。例如,你可以使用該方法來調整子檢視控制器的大小或位置。

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.

2. 使用Storyboard建立一個CollectionViewController

(1) 從控制元件庫中拖拽出Collection View Controller ,你可以在Cell上新增一個ImageView, 並且新增上圖片,這樣看起來也漂亮一些。你也可以給Cell設定一個背景色便於區分。

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

(3) 設定Cell的重用標示符為”Cell”這個我們要在程式碼中使用

(4) 給集合檢視控制器關聯程式碼,並設定Storyboard ID

3.在程式碼中實現相應的代理,和TableView非常類似

(1) 返回Section個數的方法

Objective-C
123 -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView{return1;}

(2) 返回每個Section中Cell個數的方法

Objective-C
1234 -(NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section{return30;}

(3) 通過Cell重用標示符來選擇和重用Cell

Objective-C
1234567 -(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath{UICollectionViewCell*cell=[collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];// Configure the cellreturncell;}

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

今天這篇部落格的內容算開個頭,後邊回由淺入深,慢慢更新部落格。今天就是一個Ready的過程,下篇部落格將會基於今天這個工程介紹其他的關於UICollectionView的東西,如UICollectionViewLayout等,來逐漸領略UICollectionViewController的魅力。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!