基于UICollectionView的封裝

簡(jiǎn)述

基于UICollectionView的列表的實(shí)現(xiàn)琉用,看似復(fù)雜晶密,但分解之后就是如下的四個(gè)部分的文件瞬女,而且為了方便重用虐秋,做了更為細(xì)化的分解榕茧。

1. 配置文件

  1. Layout

    1. 主要實(shí)現(xiàn)list中cell,footer客给、header用押、section的布局。即自定義的layout(系統(tǒng)提供flowlayout亦可使用)

    2. 增刪cell時(shí)的動(dòng)畫(huà)設(shè)置

  2. DataSource

    1. 數(shù)據(jù)源靶剑,list展示的數(shù)據(jù)在此文件中保存(以數(shù)組的形式)
    2. 實(shí)現(xiàn)UICollectionViewDataSource協(xié)議,將必須的數(shù)據(jù)源方法通過(guò)block的形式返回蜻拨,便于在引用處設(shè)置
    3. 實(shí)現(xiàn)插入池充、刪除、reload等方法缎讼。引用處只需簡(jiǎn)單調(diào)用即可
  3. Delegate

    1. 事件源:將點(diǎn)擊纵菌、display、size返回等事件以block回調(diào)至引用處休涤,方便配置
    2. 實(shí)現(xiàn)LayoutDelegate協(xié)議方法,提供Layout必要的布局?jǐn)?shù)據(jù)
  1. LayoutDelegate

    1. 通常放在Layout文件中笛辟,該協(xié)議繼承自UICollectionViewDelegate協(xié)議
    2. 提供Layout必須的或者非必須的資源功氨,如用來(lái)獲取cell寬高、footer和header的size屬性等

2. 界面相關(guān)

  1. cellProtocol:

    1. 自定義cell時(shí)必須實(shí)現(xiàn)該協(xié)議中的方法
    2. 提供cell的數(shù)據(jù)更新手幢、size(高度或者寬度)計(jì)算捷凄、cell的點(diǎn)擊事件(根據(jù)mvvm架構(gòu),此處不應(yīng)該有此功能围来,但未找到更合適的方案)
    3. 若cell中有一些單例的方法跺涤,如cell中點(diǎn)擊頭像,可以具體問(wèn)題具體分析(可在該cell中添加點(diǎn)擊頭像方法监透,不必在協(xié)議中添加)
    4. 具體方法:- (void)alpCellDidSelected:(id)model target:(id)target indexPath:(NSIndexPath *)indexPath
      優(yōu)化:- (void)alpCellDidSelected:(id)model target:(id)target indexPath:(NSIndexPath *)indexPath info:(id)info
      此處添加一個(gè)泛型info桶错,可以實(shí)現(xiàn)一些特殊信息的傳遞。未驗(yàn)證可行性
  2. reuseViewProtocol

    1. 自定義reuseView時(shí)需要實(shí)現(xiàn)該協(xié)議方法胀蛮,具體方案同cell
  3. modelProtocol

    1. model文件必須實(shí)現(xiàn)該協(xié)議院刁。
    2. 目前該協(xié)議中只有兩個(gè)宏:```typedef uint64_t (^fetchFirstData)(id objData,ALPHttpError *error,BOOL hasMore);

    typedef void (^fetchNextData)(id objData,ALPHttpError *error,BOOL hasMore);

3. 數(shù)據(jù)獲取

  1. collectionView category:創(chuàng)建一個(gè)擴(kuò)展,該擴(kuò)展中實(shí)現(xiàn)上拉粪狼、下拉刷新的控件和事件
  2. 創(chuàng)建具體model的擴(kuò)展退腥,實(shí)現(xiàn)數(shù)據(jù)網(wǎng)絡(luò)請(qǐng)求

4. 特殊情況

  1. 關(guān)于header或者footer執(zhí)行時(shí),在DataSource中不調(diào)用數(shù)據(jù)源委托方法再榄,猜測(cè)是apple的bug狡刘。解決方案是創(chuàng)建DataSource的擴(kuò)展,在擴(kuò)展中復(fù)寫(xiě)該方法即可實(shí)現(xiàn)調(diào)用困鸥。

具體結(jié)構(gòu)如下圖:

List配置文件.png

使用方法:

參見(jiàn)示例:

github鏈接

截圖:

1.png
2.png

由上述使用的方式可以看到代碼量還是存在的嗅蔬,只不過(guò)之前委托代理的形式現(xiàn)在替換成了block的方式。

優(yōu)點(diǎn)是多個(gè)列表的情況只需要復(fù)制一份窝革,簡(jiǎn)單的修改cell和model即可购城;
缺點(diǎn)是時(shí)刻要注意block的循環(huán)引用問(wèn)題。

若是在多section的情況下虐译,則需要在block中添加對(duì)應(yīng)的section選項(xiàng)即可瘪板,作為標(biāo)識(shí)。并且目前如獲取cell的數(shù)據(jù)源方法我都做成了在引用處返回的形式漆诽,這樣同時(shí)也實(shí)現(xiàn)了一個(gè)列表支持不同類型cell的功能侮攀。

總結(jié):這種方式的封裝锣枝,其實(shí)和調(diào)用委托方法節(jié)省不了多少代碼量,但是在重用性上還是便利很多兰英。所以找到它們的平衡點(diǎn)很重要撇叁。

不足之處,還望給予指正畦贸,謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陨闹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子薄坏,更是在濱河造成了極大的恐慌趋厉,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胶坠,死亡現(xiàn)場(chǎng)離奇詭異君账,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)沈善,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)乡数,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人闻牡,你說(shuō)我怎么就攤上這事净赴。” “怎么了澈侠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵劫侧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我哨啃,道長(zhǎng)烧栋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任拳球,我火速辦了婚禮审姓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祝峻。我一直安慰自己魔吐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布莱找。 她就那樣靜靜地躺著酬姆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奥溺。 梳的紋絲不亂的頭發(fā)上辞色,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音浮定,去河邊找鬼相满。 笑死层亿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的立美。 我是一名探鬼主播匿又,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼建蹄!你這毒婦竟也來(lái)了碌更?” 一聲冷哼從身側(cè)響起畦粮,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猪勇,失蹤者是張志新(化名)和其女友劉穎创南,沒(méi)想到半個(gè)月后屋剑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玄妈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆棱。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圆仔,靈堂內(nèi)的尸體忽然破棺而出垃瞧,到底是詐尸還是另有隱情,我是刑警寧澤坪郭,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布个从,位于F島的核電站,受9級(jí)特大地震影響歪沃,放射性物質(zhì)發(fā)生泄漏嗦锐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一沪曙、第九天 我趴在偏房一處隱蔽的房頂上張望奕污。 院中可真熱鬧,春花似錦液走、人聲如沸碳默。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘱根。三九已至,卻和暖如春巷懈,著一層夾襖步出監(jiān)牢的瞬間该抒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工砸喻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柔逼,地道東北人蒋譬。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像愉适,于是被迫代替她去往敵國(guó)和親犯助。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中维咸。剂买。。 其實(shí)如果沒(méi)有APIManager這一層是沒(méi)法使用delegate的癌蓖,畢竟多個(gè)單...
    yhtang閱讀 5,190評(píng)論 1 23
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,139評(píng)論 30 470
  • 傻傻盯著晨讀材料一半天瞬哼,花了N個(gè)一分鐘我也沒(méi)有一點(diǎn)頭緒今天該寫(xiě)什么。 寫(xiě)不出來(lái)就看吧租副,看貓友們?cè)趺磳?xiě)坐慰。咦,貌似這個(gè)...
    東青喵閱讀 245評(píng)論 1 3
  • 本次學(xué)習(xí)內(nèi)容:U6L1 回家作業(yè): 灰色練習(xí)冊(cè): Workbook - P73, Activity A. Look...
    TimmySHENX閱讀 103評(píng)論 0 0
  • 序:近來(lái)正在翻看《活出全新的自己》一書(shū)糟港,一些章節(jié)和觀點(diǎn)給了自己不少啟示。這是一本心靈讀物院仿,用靈動(dòng)的故事講述人們成長(zhǎng)...
    悅讀悅寫(xiě)悅生活閱讀 581評(píng)論 0 1