您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“分析iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“分析iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)”吧!
需求
一個(gè)頁(yè)面,可能出現(xiàn)多種cell。
這個(gè)需求應(yīng)該是很常見(jiàn)的,需要解決的問(wèn)題是如何讓多個(gè)cell能夠共同響應(yīng)同一個(gè)方法,這樣外部不需要知道具體的cell種類,只要調(diào)用同一個(gè)方法進(jìn)行配置即可。
問(wèn)了問(wèn)朋友們大家基本上是兩派。
協(xié)議基類
我個(gè)人以前也是用協(xié)議對(duì)多個(gè)cell進(jìn)行約束的,通過(guò)讓cell遵循同一個(gè)協(xié)議并實(shí)現(xiàn)協(xié)議方法,讓外部達(dá)到統(tǒng)一配置的效果。
//cell共同遵循這個(gè)協(xié)議@protocol ModuleACellConfigPropotol <NSObject>- (void)configCellWithModel:(KTModel *)model;@end通過(guò)協(xié)議調(diào)用方法UITableViewCell<ModuleACellConfigPropotol> * cell= [tableView dequeueReusableCellWithIdentifier:cellID];if ([cell respondsToSelector:@selector(configCellWithModel:)]) { [cell configCellWithModel:model];}
對(duì)于基類繼承,大家普遍反映很惡心,準(zhǔn)備重構(gòu),所以就不考慮了。
耦合
標(biāo)準(zhǔn)的MVC情況下, cell的配置方法,應(yīng)該長(zhǎ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é)議,為了達(dá)到統(tǒng)一配置,必須使用同一個(gè)方法進(jìn)行約束。而cell們實(shí)際上的充要參數(shù)并不相同,所以只能將整個(gè)model作為參數(shù)進(jìn)行傳遞。
@protocol ModuleACellConfigPropotol <NSObject>- (void)configCellWithModel:(KTModel *)model;@end
解耦
通過(guò)協(xié)議約束的方式,已經(jīng)能夠成功實(shí)現(xiàn)統(tǒng)一配置。
但有一個(gè)問(wèn)題隨之而來(lái),這樣cell就與model產(chǎn)生了耦合,導(dǎo)致cell無(wú)法復(fù)用。
從結(jié)果上來(lái)看,這樣并不完美。
要解決這個(gè)問(wèn)題,我覺(jué)得在cell與協(xié)議之間,又添加了一層適配器是個(gè)不錯(cuò)的方案。
而這個(gè)適配器,我使用了Category進(jìn)行實(shí)現(xiàn)。
@interface KTTableViewCell00 (ModuleA) <ModuleACellConfigPropotol>@end@implementation KTTableViewCell00 (ModuleA)- (void)configCellWithModel:(KTModel *)model { [self configShowViewWithTitle00:model.title];}@end
最后調(diào)用起來(lái) :
- (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;}
到此,相信大家對(duì)“分析iOS復(fù)數(shù)cell下優(yōu)雅的代碼結(jié)構(gòu)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。