UICollectionViewController說白了就是一個UIViewController + UICollectionView = UICollectionViewController。 這一點和UITableViewController是同樣同樣的。編程
由上圖可知,UICollectionViewController的父親(父類)是UIViewController, 而UIViewController的父親是UIResponder,UIResponder繼承自NSObject。這個繼承關係和UITableViewController是同樣同樣的, 也就是說UICollectionViewController和UITableViewController是兄弟或者姐妹關係。這樣比的話他倆就親近多了。bash
這些協議也和UITableViewController遵循的協議相似,經常使用的仍是UICollectionViewDataSource(數據源)和UICollectionViewDelegate(委託代理), 上面這兩個經常使用的協議就很少說了和UITableViewController的用法相似。佈局
UITraitEnvironment 是iOS8之後才引入的新的協議接口,它和Size Class有關,這個類封裝了像水平和豎直方向的Size Class等信息,iOS8的UIKit中大多數UI的基礎類(包括UIScreen, UIWindow, UIViewController, UIPresentationController 和 UIView)都實現了UITraitEnvironment這個接口,能夠經過這個接口來作一些控件顯示,屏幕適配等一些工做。ui
UIContentContainer 是iOS8以後添加的新的協議,也是和Size Class相關的協議。該協議中的方法能夠幫助你適配視圖控制器上的內容,好比內容尺寸和位置等。spa
UIViewController 和 UIPresentationController(iOS8的新特性,在這兒不作過多介紹)’象爲該協議提供默認的實現方法。當建立自定義視圖控制器或者展現控制器時,你能夠重寫默認的實現方法來調整你視圖控制器的內容。例如,你可使用該方法來調整子視圖控制器的大小或位置。3d
由上面可知UICollectionViewController是iOS6之後推出的東西,相對起來仍是比較新的。代理
- 若是你的集合視圖控制器與nib文件或者Storyboard進行了綁定,那麼他的視圖將會從nib文件或者Storybaord中進行加載。若是你是使用編程的方式來建立集合視圖控制器,那麼將會自動建立一個已經配置好的collection view, 而這個collection view能夠經過collectionView來進行訪問。
2.當從nib文件或者Storyboard中加載集合視圖時,集合視圖的數據源(Data source)和代理對象(Delegate Object)是從nib或者Storyboard中獲取的。若是data source 或者 delegate沒有被指定的話,collection view將會自動賦值一個未知的對象。code
3.當集合視圖首次出現時會從新加載上面的數據。當視圖每次顯示時,也會清除當前的選擇。不過你能夠把屬性clearsSelectionOnViewWillAppear設置成NO來改變這種行爲。cdn
你能夠建立一個自定義的UICollectionViewController子類來管理你的集合視圖。當你初始化視圖控制器時,你可使用initWithCollectionViewLayout:方法來指定集合視圖想要使用的佈局方式。由於剛建立集合視圖是沒有尺寸或者內容的,data source和delegate是一個典型集合視圖中所必須的信息。對象
你能夠重寫loadView或者其餘超類中的方法,可是若是你這樣作, 你必須確保在你實現的方法中使用super調用了超類中相應的方法。若是你沒有這麼作,集合控制器有可能沒有執行全部須要執行的任務來保證集合視圖的完整。
使用initWithCollectionViewLayout: 方法來初始化UICollectionViewController的對象,該方法能夠初始化和根據提供的佈局來配置集合視圖。佈局會控制集合視圖上的單元格(Cell)的排列方式。默認的是Flow Layout.
(1) 從控件庫中拖拽出Collection View Controller ,你能夠在Cell上添加一個ImageView, 而且添加上圖片,這樣看起來也漂亮一些。你也能夠給Cell設置一個背景色便於區分。
(2) 設定Cell的默認寬高,具體以下圖所示
(3) 設定Cell的重用標示符爲"Cell"這個咱們要在代碼中使用
(4) 給集合視圖控制器關聯代碼,並設置Storyboard ID
(1) 返回Section個數的方法
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
複製代碼
(2) 返回每一個Section中Cell個數的方法
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 30;
}
複製代碼
(3) 經過Cell重用標示符來選擇和重用Cell
1 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
2 UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
3
4 // Configure the cell
5
6 return cell;
7 }
複製代碼
經過上面的步驟一個簡單CollectionView就能夠運行起來了,最終運行效果以下所示:
今天這篇博客的內容算開個頭,後邊回由淺入深,慢慢更新博客。今天就是一個Ready的過程,下篇博客將會基於今天這個工程介紹其餘的關於UICollectionView的東西,如UICollectionViewLayout等,來逐漸領略UICollectionViewController的魅力。
你認爲如何?您是否已經將項目遷移到SWIFT5.1,請經過加咱們的交流羣 點擊此處進交流羣 ,來一塊兒交流或者發佈您的問題,意見或反饋。
做者:青玉伏案