代码实现有多个section的tableview
2个回答
2016-12-27 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数: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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
先是确定有几个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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
展开全部
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
#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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询