代码实现有多个section的tableview

 我来答
huanglenzhi
2016-12-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517199
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  首先,在一个viewcontroller里面拉取一个tableview,并添加多个cell,cell的样式相当于要存在section的一样,每一个cell起一个单独的reuse identifier,再每个cell单独建一个UITableviewCell文件,相同的cell就不用写两个。
  先是确定有几个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来区别。

  文/喝着咖啡敲代码(简书作者)
原文链接:http://www.jianshu.com/p/7ccfc9719784
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
透彻又委婉的鱼丸02
2016-12-27 · TA获得超过190个赞
知道小有建树答主
回答量:1023
采纳率:14%
帮助的人:190万
展开全部
bjc] view plain copy print?
#import "ViewController.h"

#import "SectionOneCell.h"
#import "SectionTwoCell.h"

@interface ViewController () <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, assign) NSInteger currentEditingStyle;
@property (nonatomic, copy) NSMutableArray *selectedIndexPaths;

@end

@implementation ViewController
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式