iOS tableview靜態(tài)cell動(dòng)態(tài)cell混用

前言

在之前的文章中有寫過,如何在ViewController中使用靜態(tài)TableView 這樣我們可以在任何一個(gè)界面中嵌套一個(gè)靜態(tài)的tableView,大大的提高了界面的開發(fā)效率。
但是,這只能解決那些固定不變的列表界面,而目前大部分的APP界面都是動(dòng)態(tài)的,如系統(tǒng)的搜索無線局域網(wǎng)的界面,如下圖:

Paste_Image.png

系統(tǒng)的無線局域網(wǎng)搜索界面就是一個(gè)典型的動(dòng)態(tài)cell與靜態(tài)cell混合界面,上面的展示搜索到的WiFI熱點(diǎn)列表是動(dòng)態(tài)的,而下面的配置界面又是靜態(tài)的,如何來快速的開發(fā)這種界面呢?下面就給大家詳細(xì)說來。

效果圖(不多說咱先看看效果圖)

tableview.gif

第一步(完成靜態(tài)的部分)

根據(jù)自己的業(yè)務(wù)需求先把靜態(tài)部分用storyboard拖拽完成,如果是在UITableViewController中就直接將TableView設(shè)置為靜態(tài),然后直接拖拽。如果是在UIViewController中請(qǐng)參照之前的文章在ViewController中使用靜態(tài)TableView
拖拽好后,記得預(yù)留好動(dòng)態(tài)cell的位置,如下圖:
重點(diǎn):動(dòng)態(tài)的cell所在的Section中一定要留一個(gè)cell(無論什么cell)否則會(huì)造成崩潰

Paste_Image.png

第二步(代碼部分)

定義一個(gè)枚舉,用于區(qū)分自己的section類型

Paste_Image.png

數(shù)據(jù)源以及代理,動(dòng)態(tài)cell和正常的tableview一樣處理,靜態(tài)的cell直接返回父類就好

//cell的個(gè)數(shù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    if(SectionTypeHobby == section){//愛好 (動(dòng)態(tài)cell)
        return self.hobbysArr.count;
    }
    return [super tableView:tableView numberOfRowsInSection:section];
}
//cell 也可以用注冊(cè)的方式來復(fù)用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if(SectionTypeHobby == indexPath.section){//愛好 (動(dòng)態(tài)cell)
        HobbyCell *cell = [tableView dequeueReusableCellWithIdentifier:HobbyCellID];
        if(!cell){
            cell = [[NSBundle mainBundle] loadNibNamed:HobbyCellID owner:nil options:nil].lastObject;
        }
        return cell;
    }
    return [super tableView:tableView cellForRowAtIndexPath:indexPath];
}
//cell高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if(SectionTypeHobby == indexPath.section){//愛好 (動(dòng)態(tài)cell)
        return HobbyCellHeight;
    }
    return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
//cell的縮進(jìn)級(jí)別,動(dòng)態(tài)靜態(tài)cell必須重寫,否則會(huì)造成崩潰
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{
    if(SectionTypeHobby == indexPath.section){//愛好 (動(dòng)態(tài)cell)
        return [super tableView:tableView indentationLevelForRowAtIndexPath: [NSIndexPath indexPathForRow:0 inSection:SectionTypeHobby]];
    }
    return [super tableView:tableView indentationLevelForRowAtIndexPath:indexPath];
}

這樣靜態(tài)cell與動(dòng)態(tài)cell混用就完成了,當(dāng)然這里我只是隨便舉個(gè)例子,大家可以根據(jù)自己的業(yè)務(wù)需求隨意的搭配動(dòng)態(tài)與靜態(tài)cell混用了。
ps:本人踩過的坑
--- 1.storyboard中動(dòng)態(tài)cell所在的section中必須預(yù)留一個(gè)cell(隨便什么cell)否則會(huì)造成崩潰。
--- 2.- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath;方法必須重寫,否則會(huì)造成崩潰。
最后附上demo地址:Demo
https://github.com/ywdonga/TableViewDynamicStaticCell
給不給星無所謂,大家開心就好。????????
本人在外包公司,以上用法已經(jīng)在N個(gè)項(xiàng)目中使用,目前未出現(xiàn)過任何問題,如果哪位同學(xué)有遇到問題可以聯(lián)系我:QQ 329720990 郵箱 dongyouweie@126.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件,我們平時(shí)使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,282評(píng)論 3 38
  • 引子 菊花香隱隱傳來,是秋天了嗎? 我瑟縮著退至檐下,伸手去擋撲面而來的陽光。長時(shí)間呆在幽暗之處,眼睛已經(jīng)不...
    梨渦小篆本尊閱讀 1,235評(píng)論 4 9
  • 夢(mèng)想都監(jiān)督不了你,還有什么可以監(jiān)督你——對(duì)想購買監(jiān)督學(xué)習(xí)的我的反省 那倒是恐懼了,怎么辦,應(yīng)該能做好,因?yàn)檫@可能是...
    優(yōu)00閱讀 136評(píng)論 0 0
  • 昨天的夢(mèng),似乎太天馬行空,光怪陸離! 夢(mèng)到了去針灸, 夢(mèng)到了等公交車, 夢(mèng)到了異界,那是一個(gè)神奇的世界,季節(jié)只有兩...
    月光銀鹿閱讀 206評(píng)論 0 0
  • 中午和一個(gè)研究生同學(xué)吃飯,我們都是經(jīng)濟(jì)學(xué)專業(yè),我碩士畢業(yè)以后開始工作,他讀了博士,現(xiàn)在在一家知名的宏觀分析機(jī)構(gòu)工作...
    廷婷閱讀 2,128評(píng)論 29 50

友情鏈接更多精彩內(nèi)容