代码实现有多个section的tableview

上篇文章写道怎么在tableviewcontroller里面添加一个view 用的是

[[[[UIApplication sharedApplication]  windows] firstObject] addSubview:_payView];

这样将一个view添加到UIApplication的firstObject,对于后续维护不方便,而且这样添加的view到其他界面还要隐藏起来,是一种“不健康的方式”。

对于订单确认这种界面,内容可能会有增删,不应该去使用tableviewcontroller,其根view是一个UITableview,导致很多很多问题,比如直接用addsubview添加一个view会随着tableview的滚动而滚动,最好的方法就是让根view是一个UIView。

下面简单的介绍一下,怎么在viewcontroller拉取一个Dynamic Prototypes的tableview,代码实现多个section,如图1


代码实现有多个section的tableview_第1张图片
图1

首先,在一个viewcontroller里面拉取一个tableview,并添加多个cell,cell的样式相当于要存在section的一样,每一个cell起一个单独的reuse identifier,再每个cell单独建一个UITableviewCell文件,相同的cell就不用写两个,如图一中的微信支付和支付宝支付只需要一个cell,到时候对该cell进行重用。如图2


代码实现有多个section的tableview_第2张图片
图2

界面弄了之后,下面就是代码码阿码阿阿码阿码阿码

先是确定有几个section,在确定section里面的row有多少个

- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {  return6; }

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {

switch(section) {

case0: return1;  break;

case1: return1; break;

case2: return2; break;

case3: return1; break;

case4: return1; break;

case5: return1; break;

default: return0; break; 

} }

确定了数量之后,往每个section里面填入相应的cell,即引入上面创建的UITableviewCell文件,创建新的cell用上面写好的cell reuse identifier确定

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {

switch(indexPath.section) {

case0:

{

AddrInOrderConfirmTableViewCell* addrCell = [tableView dequeueReusableCellWithIdentifier:@"CellForAddr"];

//AddrInOrderConfirmTableViewCell是UITableviewCell文件,填写在cell的custom class

//CellForAddr是cell的reuse identifier

return addrCell;

break;

}

...

//对相同的cell的重用如下,再PayTypeInOrderConfirmTableViewCell里面拉相应的label,进行值的变化

case2:

{

PayTypeInOrderConfirmTableViewCell* payTypeCell = [tableViewdequeueReusableCellWithIdentifier:@"CellForPayType"];

if(indexPath.row==0) {

payTypeCell.payTypeImg.image= [UIImageimageNamed:@"zhifubao"];

payTypeCell.payTypeLabel.text=@"支付宝支付";

}elseif(indexPath.row==1){

payTypeCell.payTypeImg.image= [UIImageimageNamed:@"wechat"];

payTypeCell.payTypeLabel.text=@"微信支付";

}returnpayTypeCell;

break;

}

最后对每个section取个title,再调整它的header和footer的高度就好了

- (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section{

NSString* sectionName;

switch(section){

case0: sectionName =@"配送地址"; break;

...

}

return sectionName;

}

- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section {

switch(section) {

case0: return50;  break;

...

}}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section {

return CGFLOAT_MIN;

}

//section里面每个row的高度

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{

switch(indexPath.section) {

case0: return60;  break;

...

}}

其实整个就是创建cell,让section带入每个cell,用reuse identifier来区别。

对于tableviewcontroller还是少用为好,毕竟用viewcontroller里面放个tableview也几乎能完成全部功能,就是编写时比较麻烦,但是易于维护。

萌新一起学习。

你可能感兴趣的:(代码实现有多个section的tableview)