前言
在之前的文章中有寫過阶女,如何在ViewController中使用靜態(tài)TableView 這樣我們可以在任何一個界面中嵌套一個靜態(tài)的tableView,大大的提高了界面的開發(fā)效率凑阶。
但是,這只能解決那些固定不變的列表界面衷快,而目前大部分的APP界面都是動態(tài)的宙橱,如系統(tǒng)的搜索無線局域網(wǎng)
的界面,如下圖:
系統(tǒng)的
無線局域網(wǎng)
搜索界面就是一個典型的動態(tài)cell與靜態(tài)cell混合界面
蘸拔,上面的展示搜索到的WiFI熱點列表是動態(tài)的养匈,而下面的配置界面又是靜態(tài)的,如何來快速的開發(fā)這種界面呢都伪?下面就給大家詳細說來呕乎。
效果圖(不多說咱先看看效果圖)
第一步(完成靜態(tài)的部分)
根據(jù)自己的業(yè)務需求先把靜態(tài)部分用storyboard
拖拽完成,如果是在UITableViewController
中就直接將TableView
設置為靜態(tài),然后直接拖拽陨晶。如果是在UIViewController
中請參照之前的文章在ViewController中使用靜態(tài)TableView
拖拽好后猬仁,記得預留好動態(tài)cell
的位置,如下圖:
重點:動態(tài)的cell所在的Section中一定要留一個cell(無論什么cell)否則會造成崩潰
第二步(代碼部分)
定義一個枚舉先誉,用于區(qū)分自己的section
類型
數(shù)據(jù)源以及代理,動態(tài)cell和正常的tableview一樣處理湿刽,靜態(tài)的cell直接返回父類就好
//cell的個數(shù)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if(SectionTypeHobby == section){//愛好 (動態(tài)cell)
return self.hobbysArr.count;
}
return [super tableView:tableView numberOfRowsInSection:section];
}
//cell 也可以用注冊的方式來復用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if(SectionTypeHobby == indexPath.section){//愛好 (動態(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){//愛好 (動態(tài)cell)
return HobbyCellHeight;
}
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
//cell的縮進級別,動態(tài)靜態(tài)cell必須重寫褐耳,否則會造成崩潰
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{
if(SectionTypeHobby == indexPath.section){//愛好 (動態(tài)cell)
return [super tableView:tableView indentationLevelForRowAtIndexPath: [NSIndexPath indexPathForRow:0 inSection:SectionTypeHobby]];
}
return [super tableView:tableView indentationLevelForRowAtIndexPath:indexPath];
}
這樣靜態(tài)cell與動態(tài)cell混用就完成了诈闺,當然這里我只是隨便舉個例子,大家可以根據(jù)自己的業(yè)務需求隨意的搭配動態(tài)與靜態(tài)cell混用了铃芦。
ps:本人踩過的坑
--- 1.storyboard
中動態(tài)cell
所在的section
中必須預留一個cell
(隨便什么cell)否則會造成崩潰雅镊。
--- 2.- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath;
方法必須重寫,否則會造成崩潰刃滓。
最后附上demo地址:Demo
https://github.com/ywdonga/TableViewDynamicStaticCell
給不給星無所謂仁烹,大家開心就好。????????
本人在外包公司咧虎,以上用法已經(jīng)在N個項目中使用卓缰,目前未出現(xiàn)過任何問題,如果哪位同學有遇到問題可以聯(lián)系我:QQ 329720990 郵箱 dongyouweie@126.com