"ComponentKit"是一個非常強(qiáng)大的描述性UI框架,由于國內(nèi)教程不多在這里簡單做個教程,拋磚引玉,希望未來能有更好更全面的教程。
看到這篇教程的朋友應(yīng)該已經(jīng)創(chuàng)建了一個集成了ComponentKit以及可以通過編譯的空白工程,如果你還沒有甚至也不知道怎么創(chuàng)建的話可以參考上一篇教程:
Facebook-ComponentKit教程(一)準(zhǔn)備工作
首先打開之前的工程,command+N 新建一個繼承自UICollectionViewController 的文件,把它命名為CollectionViewController 。*不要忘記將.m文件改成.mm

打開Main.storyboard,刪掉原來的ViewController拖入一個CollectionViewController,在Custom Class 中將Class 指定成CollectionViewController

不廢話,回到CollectionViewController.mm中讓我們開始擼代碼!

首先確認(rèn)協(xié)議CKComponentProvider 它就跟我們的CollectionViewDataSource 是一個概念,但是更簡單!實(shí)現(xiàn)這個協(xié)議的類就是組件的數(shù)據(jù)提供者(即數(shù)據(jù)源)。翻譯成UIKit的那一套就是:
self.collectionView.dataSource = self;

其次在ViewDidLoad中新建一個SizeRangeProvider它是用來在后期幫助我們調(diào)整Size的,他的意思類似UIKit中的contentSize 不過目前用不上,先不管他。
然后是Configuration,它用來告訴DataSource誰來提供component,誰來提供size。
最后是重中之重的DataSource!?。?這個DataSource用來控制整個數(shù)據(jù)流。所謂數(shù)據(jù)驅(qū)動,指的就是這玩意驅(qū)動了。。。
Changeset 是配合DataSource使用的,每次數(shù)據(jù)有更新會創(chuàng)建新的Changeset,Changeset 用來描述增加那些Cells,刪除哪些Cells 還是更新那些Cells,然后“告訴”
DataSource應(yīng)用Changeset以及使用同步還是異步模式更新。
翻譯過來就是 :
[self.collectionView reloadData];

最后說下這幾個方法,ComponentForModel: context: 相當(dāng)于UIKit中的
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
他告訴ComponentKit 應(yīng)該顯示那個Component,這里我們返回一個最簡單的Label(這里你可能會覺得這里的語法很奇怪,沒關(guān)系,語法只是媒介,強(qiáng)者無門派。往后看你肯定能學(xué)會的,相信我)他的顯示內(nèi)容是之前我們傳過來的Model,暨@"Hello World"的字符串。顏色是黑色,字號是40,左對齊。
collectionView的代理方法還會詢問我們Cell的大小,直接用dataSource的 sizeForItemAtIndexPath: 交給DataSource自己去算就好了。
別忘了在willDisplayCell 和 didEndDisplayCell 也告訴dataSource我要顯示Cell 和我顯示完Cell了!?
OK大功告成。再次運(yùn)行你會看到像我這里一樣的一個只有一個Cell元素的Collectionview。而這里的數(shù)據(jù)模型就是Hello world。不過對于這種簡單元素的界面,使用ComponentKit有點(diǎn)殺雞焉用宰牛刀的意思,感興趣的朋友可以看一下 Texture(有時間的話我也寫一篇教程)。但是如果是復(fù)雜的Feed流那你就爽上天際了。待有時間我會寫一篇教程來實(shí)現(xiàn)一個簡單的微博首頁。

以上,感謝。