最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)詳解

 更新時間:2019年04月03日 11:33:35   作者:kirito_song  
這篇文章主要給大家介紹了關(guān)于iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近換了新工作,第一個需求是寫幾個列表。

簡單的UITableView+Cell,但畢竟是入職后的第一個需求感覺要被review,所以還是想盡量弄得優(yōu)雅一點。

下面話不多說了,來一起看看詳細的介紹吧

需求

一個頁面,可能出現(xiàn)多種cell。

這個需求應(yīng)該是很常見的,需要解決的問題是如何讓多個cell能夠共同響應(yīng)同一個方法,這樣外部不需要知道具體的cell種類,只要調(diào)用同一個方法進行配置即可。

問了問朋友們大家基本上是兩派。

  • 協(xié)議
  • 基類

我個人以前也是用協(xié)議對多個cell進行約束的,通過讓cell遵循同一個協(xié)議并實現(xiàn)協(xié)議方法,讓外部達到統(tǒng)一配置的效果。

//cell共同遵循這個協(xié)議
@protocol ModuleACellConfigPropotol <NSObject>
- (void)configCellWithModel:(KTModel *)model;
@end
​
​
通過協(xié)議調(diào)用方法
UITableViewCell<ModuleACellConfigPropotol> * cell= [tableView dequeueReusableCellWithIdentifier:cellID];
if ([cell respondsToSelector:@selector(configCellWithModel:)]) {
 [cell configCellWithModel:model];
}

對于基類繼承,大家普遍反映很惡心,準備重構(gòu),所以就不考慮了。

耦合

標準的MVC情況下, cell的配置方法,應(yīng)該長這樣:

@interface KTTableViewCell00 : UITableViewCell
- (void)configShowViewWithTitle00:(NSString *)title;
@end
​
@interface KTTableViewCell01 : UITableViewCell
- (void)configShowViewWithTitle01:(NSString *)title;
@end

外部賦值也不應(yīng)該把model傳遞給cell,而是只傳遞cell指定的參數(shù)

[cell configShowViewWithTitle01:model.title];

而協(xié)議,為了達到統(tǒng)一配置,必須使用同一個方法進行約束。而cell們實際上的充要參數(shù)并不相同,所以只能將整個model作為參數(shù)進行傳遞。

@protocol ModuleACellConfigPropotol <NSObject>
- (void)configCellWithModel:(KTModel *)model;
@end

解耦

通過協(xié)議約束的方式,已經(jīng)能夠成功實現(xiàn)統(tǒng)一配置。

但有一個問題隨之而來,這樣cell就與model產(chǎn)生了耦合,導(dǎo)致cell無法復(fù)用。

從結(jié)果上來看,這樣并不完美。

要解決這個問題,我覺得在cell與協(xié)議之間,又添加了一層適配器是個不錯的方案。

而這個適配器,我使用了Category進行實現(xiàn)。

@interface KTTableViewCell00 (ModuleA) <ModuleACellConfigPropotol>
​
@end
​
​
@implementation KTTableViewCell00 (ModuleA)
​
- (void)configCellWithModel:(KTModel *)model {
 [self configShowViewWithTitle00:model.title];
}
​
@end

最后調(diào)用起來 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 
 KTModel *model = self.dataArr[indexPath.row];
 
 NSString * cellID = model.identifier;
 UITableViewCell<ModuleACellConfigPropotol> * cell= [tableView dequeueReusableCellWithIdentifier:cellID];
 
 if ([cell respondsToSelector:@selector(configCellWithModel:)]) {
 [cell configCellWithModel:model];
 }
 
 return cell;
}

結(jié)尾

人總是不斷成長的,這個方案目前是我覺得比較不錯的。

如果有大佬愿意指教或者探討,不勝感激

Demo可以自取 (本地下載

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • IOS打開系統(tǒng)相機的閃光燈

    IOS打開系統(tǒng)相機的閃光燈

    今天給大家分享一下如何調(diào)用iphone的拍照功能和打開閃光燈,有些代碼我也不太理解,很多是在網(wǎng)上借鑒其他人的。
    2015-05-05
  • WKWebView、WebView和JS的交互方式詳解

    WKWebView、WebView和JS的交互方式詳解

    這篇文章主要給大家介紹了關(guān)于WKWebView、WebView和JS的交互方式,文中通過示例代碼介紹的非常詳細,對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 深入淺析IOS中UIControl

    深入淺析IOS中UIControl

    UIControl,相信大家對其并不陌生吧,比如平常最常用的UIButton就是繼承自UIControl的。下面通過本篇文章給大家介紹ios中UIControl,感興趣的朋友一起學(xué)習(xí)吧
    2015-10-10
  • iOS UIWebView 通過 cookie 完成自動登錄實例

    iOS UIWebView 通過 cookie 完成自動登錄實例

    本篇文章主要介紹了iOS UIWebView 通過 cookie 完成自動登錄實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • 深入了解iOS開發(fā)中UIWindow的相關(guān)使用

    深入了解iOS開發(fā)中UIWindow的相關(guān)使用

    這篇文章主要介紹了深入了解iOS開發(fā)中UIWindow的相關(guān)使用,以及iOS8以后產(chǎn)生的相關(guān)變化,需要的朋友可以參考下
    2015-10-10
  • IOS代碼筆記之下拉選項cell

    IOS代碼筆記之下拉選項cell

    這篇文章主要為大家詳細介紹了IOS代碼筆記之下拉選項cell的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 基于iOS實現(xiàn)圖片折疊效果

    基于iOS實現(xiàn)圖片折疊效果

    這篇文章主要為大家詳細介紹了基于iOS實現(xiàn)圖片折疊效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • iOS UIScrollView滾動視圖/無限循環(huán)滾動/自動滾動的實例代碼

    iOS UIScrollView滾動視圖/無限循環(huán)滾動/自動滾動的實例代碼

    這篇文章主要介紹了iOS UIScrollView滾動視圖/無限循環(huán)滾動/自動滾動,需要的朋友可以參考下
    2017-02-02
  • iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)詳解

    iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)詳解

    這篇文章主要給大家介紹了關(guān)于iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用iOS具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • iOS組件封裝與自動布局自定義表情鍵盤

    iOS組件封裝與自動布局自定義表情鍵盤

    這篇文章主要介紹了iOS組件封裝與自動布局自定義表情鍵盤的相關(guān)資料,需要的朋友可以參考下
    2016-04-04

最新評論

闻喜县| 凤冈县| 麟游县| 汝阳县| 六枝特区| 福泉市| 淄博市| 志丹县| 浑源县| 林口县| 荃湾区| 镇安县| 土默特右旗| 湖南省| 荔波县| 揭阳市| 卢氏县| 万荣县| 化州市| 长岛县| 金山区| 全椒县| 惠水县| 伊金霍洛旗| 新乡县| 鄂托克前旗| 保定市| 孝昌县| 会宁县| 万载县| 囊谦县| 四子王旗| 茂名市| 东城区| 三门峡市| 渭南市| 且末县| 军事| 闸北区| 晋江市| 汝州市|