(轉(zhuǎn))iOS開發(fā)之UICollectionViewController系列(一) :Ready Your CollectionViewController

之前用CollectionViewController只是皮毛椅邓,一些iOS從入門到精通的書上也是泛泛而談悠瞬。這幾天好好的搞了搞蘋果的開發(fā)文檔上CollectionViewController的內(nèi)容斧吐,親身體驗(yàn)了一下CollectionViewController的強(qiáng)大蔗蹋,之前一直認(rèn)為CollectionView和TableView用法差不多锨天,功能應(yīng)該也是類似的菊卷。TableView的功能就已經(jīng)很強(qiáng)大了,宝剖,CollectionView就是TableView的升級版洁闰,其功能更為強(qiáng)大。以后的幾篇博客中好好的研究一下CollectionView万细,由淺入深渴庆,層層深入,搞透CollectionView這個強(qiáng)大的組件雅镊。在一些開源社區(qū)上分享的效果比較炫的代碼,有不少是使用UICollectionView做的刃滓,UICollectionViewController是很實(shí)用的仁烹,很有必要好好的搞一下。
一. CollectionViewController簡介
UICollectionViewController說白了就是一個UIViewController + UICollectionView = UICollectionViewController咧虎。 這一點(diǎn)和UITableViewController是一樣一樣的卓缰。



1.繼承關(guān)系
由上圖可知,UICollectionViewController的父親(父類)是UIViewController, 而UIViewController的父親是UIResponder砰诵,UIResponder繼承自NSObject征唬。這個繼承關(guān)系和UITableViewController是一樣一樣的, 也就是說UICollectionViewController和UITableViewController是兄弟或者姐妹關(guān)系茁彭。這樣比的話他倆就親近多了总寒。
2.遵循的一些協(xié)議
這些協(xié)議也和UITableViewController遵循的協(xié)議類似,常用的還是UICollectionViewDataSource(數(shù)據(jù)源)和UICollectionViewDelegate(委托代理), 上面這兩個常用的協(xié)議就不多說了和UITableViewController的用法類似理肺。
UITraitEnvironment 是iOS8以后才引入的新的協(xié)議接口摄闸,它和Size Class有關(guān),這個類封裝了像水平和豎直方向的Size Class等信息妹萨,iOS8的UIKit中大多數(shù)UI的基礎(chǔ)類(包括UIScreen, UIWindow, UIViewController, UIPresentationController 和 UIView)都實(shí)現(xiàn)了UITraitEnvironment
這個接口年枕,可以通過這個接口來做一些控件顯示,屏幕適配等一些工作乎完。
UIContentContainer 是iOS8之后添加的新的協(xié)議熏兄,也是和Size Class相關(guān)的協(xié)議。該協(xié)議中的方法可以幫助你適配視圖控制器上的內(nèi)容树姨,比如內(nèi)容尺寸和位置等摩桶。
UIViewController 和 UIPresentationController(iOS8的新特性,在這兒不做過多介紹)’象為該協(xié)議提供默認(rèn)的實(shí)現(xiàn)方法帽揪。當(dāng)創(chuàng)建自定義視圖控制器或者展示控制器時典格,你可以重寫默認(rèn)的實(shí)現(xiàn)方法來調(diào)整你視圖控制器的內(nèi)容。例如台丛,你可以使用該方法來調(diào)整子視圖控制器的大小或位置耍缴。

  1. 由上面可知UICollectionViewController是iOS6以后推出的東西砾肺,相對起來還是比較新的。
    二. UICollectionViewController的實(shí)現(xiàn)行為
  2. 如果你的集合視圖控制器與nib文件或者Storyboard進(jìn)行了綁定防嗡,那么他的視圖將會從nib文件或者Storybaord中進(jìn)行加載变汪。如果你是使用編程的方式來創(chuàng)建集合視圖控制器,那么將會自動創(chuàng)建一個已經(jīng)配置好的collection view, 而這個collection view可以通過collectionView來進(jìn)行訪問蚁趁。
    2.當(dāng)從nib文件或者Storyboard中加載集合視圖時裙盾,集合視圖的數(shù)據(jù)源(Data source)和代理對象(Delegate Object)是從nib或者Storyboard中獲取的。如果data source 或者 delegate沒有被指定的話他嫡,collection view將會自動賦值一個未知的對象番官。
    3.當(dāng)集合視圖首次出現(xiàn)時會重新加載上面的數(shù)據(jù)。當(dāng)視圖每次顯示時钢属,也會清除當(dāng)前的選擇徘熔。不過你可以把屬性clearsSelectionOnViewWillAppear設(shè)置成NO來改變這種行為。
    你可以創(chuàng)建一個自定義的UICollectionViewController子類來管理你的集合視圖淆党。當(dāng)你初始化視圖控制器時酷师,你可以使用initWithCollectionViewLayout:方法來指定集合視圖想要使用的布局方式。因?yàn)閯倓?chuàng)建集合視圖是沒有尺寸或者內(nèi)容的染乌,data source和delegate是一個典型集合視圖中所必須的信息山孔。
    你可以重寫loadView或者其他超類中的方法,但是如果你這樣做, 你必須確保在你實(shí)現(xiàn)的方法中使用super調(diào)用了超類中相應(yīng)的方法荷憋。如果你沒有這么做台颠,集合控制器有可能沒有執(zhí)行所有需要執(zhí)行的任務(wù)來保證集合視圖的完整。
    三.簡單集合視圖控制器創(chuàng)建
    1.初始化UICollectionViewController對象
    使用initWithCollectionViewLayout: 方法來初始化UICollectionViewController的對象勒庄,該方法可以初始化和根據(jù)提供的布局來配置集合視圖蓉媳。布局會控制集合視圖上的單元格(Cell)的排列方式。默認(rèn)的是Flow Layout.


  3. 使用Storyboard創(chuàng)建一個CollectionViewController
    (1) 從控件庫中拖拽出Collection View Controller 锅铅,你可以在Cell上添加一個ImageView, 并且添加上圖片酪呻,這樣看起來也漂亮一些。你也可以給Cell設(shè)置一個背景色便于區(qū)分盐须。



    (2) 設(shè)定Cell的默認(rèn)寬高玩荠,具體如下圖所示



    (3) 設(shè)定Cell的重用標(biāo)示符為”Cell”這個我們要在代碼中使用

    (4) 給集合視圖控制器關(guān)聯(lián)代碼,并設(shè)置Storyboard ID

    3.在代碼中實(shí)現(xiàn)相應(yīng)的代理,和TableView非常類似
    (1) 返回Section個數(shù)的方法

Objective-C

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}

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

Objective-C

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
 
    return 30;
}

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

Objective-C

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

通過上面的步驟一個簡單CollectionView就可以運(yùn)行起來了贼邓,最終運(yùn)行效果如下所示:



今天這篇博客的內(nèi)容算開個頭阶冈,后邊回由淺入深,慢慢更新博客塑径。今天就是一個Ready的過程女坑,下篇博客將會基于今天這個工程介紹其他的關(guān)于UICollectionView的東西,如UICollectionViewLayout等统舀,來逐漸領(lǐng)略UICollectionViewController的魅力匆骗。

如果您是iOS開發(fā)者劳景,或者對本篇文章感興趣,請關(guān)注本人碉就,后續(xù)會更新更多相關(guān)文章盟广!敬請期待!

參考文章:
iOS開發(fā)之窺探UICollectionViewController(一) -- Ready Your CollectionViewController

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓮钥,一起剝皮案震驚了整個濱河市筋量,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碉熄,老刑警劉巖桨武,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锈津,居然都是意外死亡呀酸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門一姿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跃惫,你說我怎么就攤上這事叮叹。” “怎么了爆存?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵蛉顽,是天一觀的道長。 經(jīng)常有香客問我先较,道長携冤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任闲勺,我火速辦了婚禮曾棕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菜循。我一直安慰自己翘地,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布癌幕。 她就那樣靜靜地躺著衙耕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勺远。 梳的紋絲不亂的頭發(fā)上橙喘,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音胶逢,去河邊找鬼厅瞎。 笑死饰潜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磁奖。 我是一名探鬼主播囊拜,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼比搭!你這毒婦竟也來了冠跷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤身诺,失蹤者是張志新(化名)和其女友劉穎蜜托,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霉赡,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橄务,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了穴亏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜂挪。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗓化,靈堂內(nèi)的尸體忽然破棺而出棠涮,到底是詐尸還是另有隱情,我是刑警寧澤刺覆,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布严肪,位于F島的核電站,受9級特大地震影響谦屑,放射性物質(zhì)發(fā)生泄漏驳糯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一氢橙、第九天 我趴在偏房一處隱蔽的房頂上張望酝枢。 院中可真熱鬧,春花似錦悍手、人聲如沸隧枫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官脓。三九已至,卻和暖如春涝焙,著一層夾襖步出監(jiān)牢的瞬間卑笨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工仑撞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赤兴,地道東北人妖滔。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像桶良,于是被迫代替她去往敵國和親座舍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容