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动态表的使用的更多相关文章

  1. [K/3Cloud] 动态表单打开时传递一个自定义参数并在插件中获取

    插件中在调用动态表单时,通过DynamicFormShowParameter的CustomParams,增加自定义的参数. /// <summary> /// 库存查询 /// </ ...

  2. [K/3Cloud]调用动态表单时,传递自定义参数

    插件中在调用动态表单时,通过DynamicFormShowParameter的CustomParams,增加自定义的参数. private void ShowMaterialStock() { obj ...

  3. SpringBoot与MybatisPlus3.X整合之动态表名 SQL 解析器(七)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  4. Flink:动态表上的连续查询

    用SQL分析数据流 越来越多的公司在采用流处理技术,并将现有的批处理应用程序迁移到流处理或者为新的应用设计流处理方案.其中许多应用程序专注于分析流数据.分析的数据流来源广泛,如数据库交易,点击,传感器 ...

  5. 循序渐进VUE+Element 前端应用开发(27)--- 数据表的动态表单设计和数据存储

    在我们一些系统里面,有时候会需要一些让用户自定义的数据信息,一般这些可以使用扩展JSON进行存储,不过每个业务表的显示项目可能不一样,因此需要根据不同的表单进行设计,然后进行对应的数据存储.本篇随笔结 ...

  6. Flink原理(七)——动态表(Dynamic tables)

    前言 本文是结合Flink官网,个人理解所得,若是有误欢迎留言指出,谢谢!文中图皆来自官网(链接[1]). 本文将随着下面这个问题展开,针对该问题更为生动的解释可以参见金竹老师的分享(链接[2]). ...

  7. iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见

    iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见 (2015-12-05 12:48:20)[编辑][删除] 转载▼     首先我们先明确一下问题: 1.因为UI是在主线 ...

  8. angularjs 动态表单, 原生事件中调用angular方法

    1. 原生事件中调用angular方法, 比如 input的onChange事件想调用angular里面定义的方法 - onChange="angular.element(this).sco ...

  9. 如何在.Net Core MVC中为动态表单开启客户端验证

    非Core中的请参照: MVC的验证 jquery.validate.unobtrusive mvc验证jquery.unobtrusive-ajax 参照向动态表单增加验证 页面引入相关JS: &l ...

随机推荐

  1. .cn根服务器被攻击之后

    如果是互联网行业的人员应该知道,8月25日凌晨,大批的“.cn”域名的网站都无法访问,当然包括weibo.cn等大型网站.个人比较奇怪的一件事情是,微博PC网页版是:www.weibo.com,而mo ...

  2. Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决

    环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...

  3. JAVA中关于锁机制

    本文转自 http://blog.csdn.net/yangzhijun_cau/article/details/6432216 一段synchronized的代码被一个线程执行之前,他要先拿到执行这 ...

  4. URL的组成格式

    最近在学习js的Ajax方面的内容,发现自己对基础的计算机网络知识认识不足,所以大概了解了下. URL组成格式 图中中括号是可选项 protocol 协议,常用的协议是http hostname 主机 ...

  5. SpringData —— HelloWorld

    SpringData 简介 优点 简化数据库访问,减少数据访问层的开发量. 支持的数据库类型 支持 NoSQL 存储,如 MongoDB,Redis. 支持关系型数据存储技术,如 jdbc,jpa. ...

  6. iOS的一些面试题分析总结(0)

    虽然一些东西在实际工作中我们是很少用到的,但是面试确实会经常问到一些我们不常用的东西,所以说有时候看一看还是有必要的,一方面面试也是很重要的一件事,另一方面某些情况下也能帮我们查漏补缺. 一.NSNo ...

  7. [VB.NET]调用API获取/设置键盘按键状态

    1.调用GetAsyncKeyState()获取指定按键的状态,GetActiveKey()检索指定范围内的按键状态 2.调用keybd_event()可合成一次击键事件,通常两次击键事件间需要设定时 ...

  8. 微软版的SqlHelper.cs类

    一,微软SQLHelper.cs类 中文版: using System; using System.Data; using System.Xml; using System.Data.SqlClien ...

  9. Python 3.4 send mail

    #coding=utf-8 #Python 3.4 https://docs.python.org/3.4/library/ #IDE:Visual Studio 2015 Window10 impo ...

  10. Codeforces Round #234A

    Inna and choose option     题意: 一个由12个字符('O'或'X')组成的字符串,这12个字符可以排列成a*b(a*b=12)的矩阵,要求矩阵某一列都是'X'.用户输入t个 ...