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 ...
随机推荐
- 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)
最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...
- r.js结合gulp等于webpack(angular为例)
本人大学时玩dojo,开始了AMD模块化的不归路,工作后一直使用requirejs,感觉非常好.但是,近来随着react的火热,webpack成为了天下无敌的模块化工具,能做模块化,合并压缩,监视等, ...
- Hibernate学习之——搭建log4j日志环境
昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...
- Openfire/XMPP学习之——一个简单的Smack样例
昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...
- 重温Servlet学习笔记--response对象
在用户浏览网页时,服务器对于客户端浏览器做出的响应被封装成一个HttpServletResponse对象,要对浏览器操作只需要操作这个response对象即可.response的功能分类及介绍: 响应 ...
- jQuery.grep()
什么是jQuery.grep()? jQuery.grep()是一个查找满足过滤函数的数组元素的函数.原始数组不受影响,返回值为数组. 用法介绍: 写法: jQuery.grep( array, fu ...
- 1.Struts2简介和Struts2开发环境搭建
一.Struts2简介: 1.什么是Struts2? 著名的SSH三大框架分别为:表现层(Struts).业务逻辑层(Spring),持久化层(Hibernate). Struts2是在WebWork ...
- 在新浪云SAE中使用smarty引擎模版
在新浪云上使用smarty时会发现又这样的错误信息: “SAE_Fatal_error: Uncaught exception 'SmartyException' with message 'unab ...
- Rafy 领域实体框架 - 树型实体功能(自关联表)
在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解. 场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都 ...
- Visual Studio中安装viemu后,vim vax 快捷键大全
高效率移动 在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面VIM就像一个“哑巴”编辑器一样.很多新手都会一直呆在插入模式里面,因为这样易于使用.但VIM的强大之处在于 ...