iOS TableView多樣式cell的解決方案

一.背景

在日常開發(fā)中,總少不了用tableView展示數(shù)據(jù),不過在稍微開始復雜的tableView中,總會包含多種樣式的cell,這需要我們自定義不同樣式的cell并在tableview中應用,本文要解決的就是上面提出的問題。


話不多說上代碼

#pragma mark tableViewDelegate
//celltypeArray此數(shù)組為實際需要展示的cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return  self.celltypeArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//通過cellIdIdentifierAtIndexpath獲取重用id
    EntertainmentBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdIdentifierAtIndexpath:indexPath]];
    if(!cell){
//通過cellClassAtIndexpath:indexPath獲取cell類名,所有的cell都是需要繼承EntertainmentBaseCell的
        Class cls = [self cellClassAtIndexpath:indexPath];
        cell = [[cls alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[self cellIdIdentifierAtIndexpath:indexPath]];
    }
    [self bindCell:cell index:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    if(self.cellModel){
        cell.cellModel =self.cellModel;
    }
    return cell;
}

在tableview的代理中通過調(diào)用cellIdIdentifierAtIndexpath來設置cell的重用id(就是不同樣式cell的類名)
而cellClassAtIndexpath則是通過枚舉值來判斷需要用的是哪個cell類
而關于cell,因為不知道復用取出來的是哪種類型的cell,我們就需要創(chuàng)建一個BaseCell類,讓所有的自定義cell繼承于該基類珊佣。
代碼如下:

#pragma mark 配置不同的cell樣式
//根據(jù)indexPath獲取cell類型
-(Class)cellClassAtIndexpath:(NSIndexPath *)indexpath{
    cellType type = [self.celltypeArray[indexpath.row] longValue];
    switch (type) {
        case CELLTYPEUSERINFO:
            return [NewEntertainmentHeaderCell class];
            break;
        case CELLTYPEGB:
            return [NewEntertainmentGBRemindCell class];
            break;
        case CELLTYPEVIP:
            return [EntertainmentVipCell class];
            break;
        case CELLTYPEADV:
            return [EntertainmentAdvCell class];
            break;
        case CELLTYPEVIDEO:
            return [EntertainmentVideoCell class];
            break;
        case CELLTYPECollection:
            return [EntertainmentCollectionCell class];
            break;
        case CELLTYPEGUESS:
            return [EntertainmentGuessCell class];
            break;
    }
    return nil;
}
//根據(jù)indexPath獲取cell重用id
-(NSString *)cellIdIdentifierAtIndexpath:(NSIndexPath *)indexPath{
    return NSStringFromClass([self cellClassAtIndexpath:indexPath]);
}

通過定義枚舉變量來區(qū)別不同樣式的cell類

typedef NS_ENUM(NSInteger,cellType){
    CELLTYPEUSERINFO,
    CELLTYPEGB,
    CELLTYPEVIP,
    CELLTYPEADV,
    CELLTYPEVIDEO,
    CELLTYPECollection,
    CELLTYPEGUESS
};

-(NSMutableArray *)celltypeArray{
    if(!_celltypeArray){
        _celltypeArray = [@[@(CELLTYPEUSERINFO),@(CELLTYPEGB),@(CELLTYPEVIP),@(CELLTYPEVIDEO),@(CELLTYPECollection),@(CELLTYPEADV),@(CELLTYPEGUESS)]mutableCopy];
    }
    return _celltypeArray;
}

這樣可以在你需要添加一個新的樣式cell的時候,只需要自定義cell類,然后添加一個新的枚舉變量與之對應,并添加到數(shù)組中即可蜗顽。

PS:這樣做只適用于cell數(shù)量不是特別多的時候,不然手動加cell也很麻煩,不過一般的如果cell的數(shù)量特別大的時候,樣式都是偏向于固定的樣式.

如果有更好的解決方案,歡迎交流~~~~~

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末渐排,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌爆捞,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勾拉,死亡現(xiàn)場離奇詭異煮甥,居然都是意外死亡,警方通過查閱死者的電腦和手機藕赞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門成肘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斧蜕,你說我怎么就攤上這事双霍。” “怎么了批销?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵洒闸,是天一觀的道長。 經(jīng)常有香客問我均芽,道長丘逸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任掀宋,我火速辦了婚禮深纲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劲妙。我一直安慰自己湃鹊,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布是趴。 她就那樣靜靜地躺著涛舍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唆途。 梳的紋絲不亂的頭發(fā)上富雅,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音肛搬,去河邊找鬼没佑。 笑死,一個胖子當著我的面吹牛温赔,可吹牛的內(nèi)容都是我干的蛤奢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啤贩!你這毒婦竟也來了待秃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤痹屹,失蹤者是張志新(化名)和其女友劉穎章郁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體志衍,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡暖庄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了楼肪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片培廓。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖春叫,靈堂內(nèi)的尸體忽然破棺而出肩钠,到底是詐尸還是另有隱情,我是刑警寧澤象缀,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布蔬将,位于F島的核電站,受9級特大地震影響央星,放射性物質(zhì)發(fā)生泄漏霞怀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一莉给、第九天 我趴在偏房一處隱蔽的房頂上張望毙石。 院中可真熱鬧,春花似錦颓遏、人聲如沸徐矩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滤灯。三九已至,卻和暖如春曼玩,著一層夾襖步出監(jiān)牢的瞬間鳞骤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工黍判, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留豫尽,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓顷帖,卻偏偏與公主長得像美旧,于是被迫代替她去往敵國和親渤滞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

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