Tableview中Dynamic Prototypes动态表的使用
Tableview时IOS中应用非常广泛的控件,当需要动态的添加多条不同的数据时,需要用动态表来实现,下面给出一个小例子,适用于不确定Section的数目,并且每个Section中的行数也不同的情况,适合新手。首先,我们来看一下效果图,模拟器上运行的结果:
文件结构:
下面来说实现过程,首先创建出游记录和出差记录的数据模型:
出游记录:Travel.h
@interface Travel : NSObject @property (nonatomic, strong) NSString *country;
@property (nonatomic, strong) NSString *time;
@property (nonatomic, strong) NSString *expend;
@property (nonatomic, strong) NSString *traffic; @end
出差记录:BusinessTravel.h
@interface BusinessTravel : NSObject @property (nonatomic, strong) NSString *country;
@property (nonatomic, strong) NSString *time;
@property (nonatomic, strong) NSString *expend;
@property (nonatomic, strong) NSString *traffic;
@property (nonatomic, strong) NSString *travelReason; @end
ViewController中为TableView添加数据:
@interface ViewController () @property(nonatomic,strong) NSMutableArray *travel;
@property(nonatomic,strong) NSMutableArray *businessTravel; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
//初始化数组,添加模拟数据
self.travel = [[NSMutableArray alloc] init];
self.businessTravel = [[NSMutableArray alloc] init]; Travel *t1 = [[Travel alloc] init];
t1.country = @"韩国";
t1.time = @"2016.3.10";
t1.expend = @"800";
t1.traffic = @"飞机";
[self.travel addObject:t1]; Travel *t2 = [[Travel alloc] init];
t2.country = @"欧洲";
t2.time = @"2016.3.20";
t2.expend = @"1000";
t2.traffic = @"飞机";
[self.travel addObject:t2]; BusinessTravel *bt = [[BusinessTravel alloc] init];
bt.country = @"日本";
bt.time = @"2016.1.20";
bt.expend = @"1000";
bt.traffic = @"飞机";
bt.travelReason = @"考察";
[self.businessTravel addObject:bt]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
} #pragma mark - Table view data source //设置Section的数目
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return (self.travel.count + self.businessTravel.count); } //设置每个Section的行数,有多少个Section,这个方法就执行多少次
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (section < (self.travel.count)) { //先往Tableview中添加出游记录,如果是出游记录返回4行,出差记录则返回5行
return 4;
} else {
return 5;
} } //设置Section的标题<span style="font-family: Arial, Helvetica, sans-serif;">,有多少个Section,这个方法就执行多少次</span>
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if (section < (self.travel.count)) {
return @"出游记录";
} else {
return @"出差记录";
} }
//往cell中添加数据
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"reuseIdentifier"];
} if (indexPath.section < (self.travel.count)) { //判断Section,如果是出游记录,则有4行,分别添加cell的标题和内容
Travel *travel = [self.travel objectAtIndex:[indexPath section]];
switch (indexPath.row) {
case SELECT_INDEX_COUNTRY:
cell.textLabel.text = @"出游国家";
cell.detailTextLabel.text = travel.country;
break;
case SELECT_INDEX_TIME:
cell.textLabel.text = @"出游时间";
cell.detailTextLabel.text = travel.time;
break;
case SELECT_INDEX_EXPEND:
cell.textLabel.text = @"出游支出";
cell.detailTextLabel.text = travel.expend;
break;
case SELECT_INDEX_TRAFFIC:
cell.textLabel.text = @"出游方式";
cell.detailTextLabel.text = travel.traffic;
break;
default:
break;
}
} else { //添加出差记录数据
BusinessTravel *businessTravel = [self.businessTravel objectAtIndex:[indexPath section]-self.travel.count];
switch (indexPath.row) {
case SELECT_INDEX_BUSINESS_COUNTRY:
cell.textLabel.text = @"出差国家";
cell.detailTextLabel.text = businessTravel.country;
break;
case SELECT_INDEX_BUSINESS_TIME:
cell.textLabel.text = @"出差时间";
cell.detailTextLabel.text = businessTravel.time;
break;
case SELECT_INDEX_BUSINESS_EXPEND:
cell.textLabel.text = @"出差支出";
cell.detailTextLabel.text = businessTravel.expend;
break;
case SELECT_INDEX_BUSINESS_TRAFFIC:
cell.textLabel.text = @"出差方式";
cell.detailTextLabel.text = businessTravel.traffic;
break;
case SELECT_INDEX_TRAVEL_REASON:
cell.textLabel.text = @"出差原因";
cell.detailTextLabel.text = businessTravel.travelReason;
break;
default:
break;
}
} return cell;
} @end
Tableview中Dynamic Prototypes动态表的使用的更多相关文章
- [K/3Cloud] 动态表单打开时传递一个自定义参数并在插件中获取
插件中在调用动态表单时,通过DynamicFormShowParameter的CustomParams,增加自定义的参数. /// <summary> /// 库存查询 /// </ ...
- [K/3Cloud]调用动态表单时,传递自定义参数
插件中在调用动态表单时,通过DynamicFormShowParameter的CustomParams,增加自定义的参数. private void ShowMaterialStock() { obj ...
- SpringBoot与MybatisPlus3.X整合之动态表名 SQL 解析器(七)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- Flink:动态表上的连续查询
用SQL分析数据流 越来越多的公司在采用流处理技术,并将现有的批处理应用程序迁移到流处理或者为新的应用设计流处理方案.其中许多应用程序专注于分析流数据.分析的数据流来源广泛,如数据库交易,点击,传感器 ...
- 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储
在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...
- Flink原理(七)——动态表(Dynamic tables)
前言 本文是结合Flink官网,个人理解所得,若是有误欢迎留言指出,谢谢!文中图皆来自官网(链接[1]). 本文将随着下面这个问题展开,针对该问题更为生动的解释可以参见金竹老师的分享(链接[2]). ...
- iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见
iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见 (2015-12-05 12:48:20)[编辑][删除] 转载▼ 首先我们先明确一下问题: 1.因为UI是在主线 ...
- angularjs 动态表单, 原生事件中调用angular方法
1. 原生事件中调用angular方法, 比如 input的onChange事件想调用angular里面定义的方法 - onChange="angular.element(this).sco ...
- 如何在.Net Core MVC中为动态表单开启客户端验证
非Core中的请参照: MVC的验证 jquery.validate.unobtrusive mvc验证jquery.unobtrusive-ajax 参照向动态表单增加验证 页面引入相关JS: &l ...
随机推荐
- Objective-C中把数组中字典中的数据转换成URL
可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...
- Deferred在jQuery和Angular中的使用与简单实现
Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...
- 关于table的一些记录
HTML有10个表格相关标签 <caption> 表格的大标题,该标记可以出现在<table> 之间的任意位置.它对于搜索引擎的机器人记录信息十分重要.参数有align.val ...
- 1Z0-053 争议题目解析25
1Z0-053 争议题目解析25 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 25.You enabled Flashback Data Archive on the INVEN ...
- 第三方侧滑菜单SlidingMenu在android studio中的使用
南尘:每天进步一点点! 前面讲了官方的侧滑菜单DrawerLayout的使用,其实早在官方没有推出这个之前,就有很多第三方的jar包如SlidingMenu等,感谢开源的力量. SlidingMenu ...
- Android之消息机制Handler,Looper,Message解析
PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...
- [Java 基础]基础语法
Java代码基本规范 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类名由若干单词组成,那么每个单词的首字母应 ...
- Spring Scope:Web项目中如何安全使用有状态的Bean对象?
Web系统是最常见的Java应用系统之一,现在流行的Web项目多使用ssm或ssh框架,使用spring进行bean的管理,这为我们编写web项目带来了很多方便,通常,我们的controler层使用注 ...
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上开发仪表盘控件
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...
- ASP.NET MVC自定义验证Authorize Attribute
前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...