封裝的tableView,瘦身VC

導(dǎo)語(yǔ):

通常我們?cè)陂_(kāi)發(fā)中,90%的時(shí)間都是在寫(xiě)一些重復(fù)的垃圾代碼询一,真正的寫(xiě)代碼時(shí)間其實(shí)只有5%左右的時(shí)間悠夯,而tableView卻是我們最常用的控件,也是復(fù)用率最高的控件竟稳,那么簡(jiǎn)化tableView代碼就顯得尤為重要新翎。

簡(jiǎn)化tableView在控制器VC中的代碼

而通常我們最直接的簡(jiǎn)化代碼操作是繼承父類(lèi),把公共代碼放在父類(lèi)控制器中住练,這是最簡(jiǎn)單也是最有效的地啰。還有一種是寫(xiě)一個(gè)分類(lèi),在分類(lèi)中寫(xiě)公共方法讲逛,這在寫(xiě)tableView是將會(huì)用到亏吝。

通常在寫(xiě)VC代碼時(shí),自定義各種cell,避免不了重復(fù)無(wú)休止的寫(xiě)一些沒(méi)有任何營(yíng)養(yǎng)的代碼 如

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    DiscoveryMenuContentView *cell = [tableView dequeueReusableCellWithIdentifier:[DiscoveryMenuContentView identifier] forIndexPath:indexPath];
            WS(weakSelf)
    cell.infoModelList = self.disoveryModel.infoList;
    return cell;
}

這將浪費(fèi)了大量的時(shí)間去寫(xiě)相似代碼盏混,而且代碼重用率非常低蔚鸥,耦合性太高。所以我們這里需要將能抽取出來(lái)的代碼全部都抽取出來(lái)许赃。

只需要寫(xiě)

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   return [tableView dequeueReusableCellAndLoadDataWithAdapter:self.dataArray[indexPath.row] delegate:self indexPath:indexPath];
}

就能夠使用于任何場(chǎng)景止喷,而可以將這段代碼寫(xiě)到父類(lèi)中 所有的子類(lèi)控制器只需要繼承或者重寫(xiě)自定義即可。

而其實(shí)這段代碼只是寫(xiě)在了tableView的分類(lèi)中

@implementation UITableView (CustomCell)

- (CustomCell *)dequeueReusableCellAndLoadDataWithAdapter:(CellDataAdapter *)adapter indexPath:(NSIndexPath *)indexPath {
   
   CustomCell *cell = [self dequeueReusableCellWithIdentifier:adapter.cellReuseIdentifier forIndexPath:indexPath];
   [cell loadContentWithAdapter:adapter delegate:nil tableView:self indexPath:indexPath];
   
   return cell;
}

- (CustomCell *)dequeueReusableCellAndLoadDataWithAdapter:(CellDataAdapter *)adapter
                                                delegate:(id <CustomCellDelegate>)delegate
                                               indexPath:(NSIndexPath *)indexPath {
   
   CustomCell *cell = [self dequeueReusableCellWithIdentifier:adapter.cellReuseIdentifier forIndexPath:indexPath];
   [cell loadContentWithAdapter:adapter delegate:delegate tableView:self indexPath:indexPath];
   
   return cell;
}

抽取出來(lái)的只是dequeue的代碼及數(shù)據(jù)的一些賦值代碼混聊,但是卻大大提高了效率


賦值操作則是寫(xiě)在了adapter文件中(即分類(lèi)中的CellDataAdapter)弹谁,adapter文件之抽取出來(lái)的是一個(gè)抽象類(lèi),當(dāng)中有cell的賦值調(diào)用句喜,cell數(shù)據(jù)源及cell高度等緩存一些操作预愤。
而adapter是封裝了數(shù)據(jù)model的一個(gè)類(lèi),可以像添加model一樣添加到數(shù)據(jù)源數(shù)組中

+ (CellDataAdapter *)cellDataAdapterWithCellReuseIdentifier:(NSString *)cellReuseIdentifiers data:(id)data
                                                cellHeight:(CGFloat)cellHeight cellType:(NSInteger)cellType {
   
   CellDataAdapter *adapter    = [[self class] new];
   adapter.cellReuseIdentifier = cellReuseIdentifiers;
   adapter.data                = data;
   adapter.cellHeight          = cellHeight;
   adapter.cellType            = cellType;
   
   return adapter;
}

+ (CellDataAdapter *)cellDataAdapterWithCellReuseIdentifier:(NSString *)cellReuseIdentifiers data:(id)data
                                                cellHeight:(CGFloat)cellHeight cellWidth:(CGFloat)cellWidth
                                                  cellType:(NSInteger)cellType {
   
   CellDataAdapter *adapter    = [[self class] new];
   adapter.cellReuseIdentifier = cellReuseIdentifiers;
   adapter.data                = data;
   adapter.cellHeight          = cellHeight;
   adapter.cellWidth           = cellWidth;
   adapter.cellType            = cellType;
   
   return adapter;
}

我們?cè)谡{(diào)用的時(shí)候是可以直接賦值的

for (int i=0;i<result.count;i++) 
{
  [self.dataArray addObject:[CustomCell dataAdapterWithData:result[i]]];
}

在繼承自CustomCell的類(lèi)中直接可以賦值操作咳胃,大大簡(jiǎn)化了代碼植康,解耦。在中小型及多table項(xiàng)目中尤為方便展懈。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末销睁,一起剝皮案震驚了整個(gè)濱河市供璧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冻记,老刑警劉巖睡毒,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異檩赢,居然都是意外死亡吕嘀,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)贞瞒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)偶房,“玉大人,你說(shuō)我怎么就攤上這事军浆∽匮螅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵乒融,是天一觀的道長(zhǎng)掰盘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赞季,這世上最難降的妖魔是什么愧捕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮申钩,結(jié)果婚禮上次绘,老公的妹妹穿的比我還像新娘。我一直安慰自己撒遣,他們只是感情好邮偎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著义黎,像睡著了一般禾进。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廉涕,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天泻云,我揣著相機(jī)與錄音,去河邊找鬼火的。 笑死壶愤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馏鹤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼娇哆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼湃累!你這毒婦竟也來(lái)了勃救?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤治力,失蹤者是張志新(化名)和其女友劉穎蒙秒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宵统,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晕讲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了马澈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓢省。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖痊班,靈堂內(nèi)的尸體忽然破棺而出勤婚,到底是詐尸還是另有隱情,我是刑警寧澤涤伐,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布馒胆,位于F島的核電站,受9級(jí)特大地震影響凝果,放射性物質(zhì)發(fā)生泄漏祝迂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一器净、第九天 我趴在偏房一處隱蔽的房頂上張望型雳。 院中可真熱鬧,春花似錦掌动、人聲如沸四啰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柑晒。三九已至,卻和暖如春眷射,著一層夾襖步出監(jiān)牢的瞬間匙赞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工妖碉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涌庭,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓欧宜,卻偏偏與公主長(zhǎng)得像坐榆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冗茸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)席镀、插件匹中、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,094評(píng)論 4 62
  • 愛(ài)之深就是當(dāng)你看見(jiàn)他和別的女孩在一起說(shuō)說(shuō)笑笑的時(shí)候你會(huì)很難過(guò),豪诲、很想問(wèn)他們?cè)谡f(shuō)什么顶捷! 愛(ài)之深就是每次吃飯、或去...
    yeah米閱讀 86評(píng)論 0 0
  • 小時(shí)候屎篱,除了電視劇和書(shū)里服赎,很少有人會(huì)真的說(shuō)諸如溫柔、溫暖之類(lèi)的詞交播,仿佛這種詞就像是一個(gè)幻影重虑,鏡花水月,即便有時(shí)候呼...
    莊清嘉閱讀 646評(píng)論 0 0
  • 今天堪侯,與淘淘共讀《妖精的小孩》第二部嚎尤。這一部分主要講述被妖精世界驅(qū)逐的薩思琪,在人類(lèi)世界也受到排擠和非議伍宦,所...
    鏗鏘玫瑰llx閱讀 789評(píng)論 0 0
  • 現(xiàn)在是午夜12:50分芽死,但是你還未歸家。 為了迎接工作上的新挑戰(zhàn)次洼,你已加班無(wú)數(shù)個(gè)夜晚关贵。連最?lèi)?ài)的足球也從之前一個(gè)禮拜...
    Marryanne閱讀 259評(píng)論 0 0