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. 使用Windows Service Wrapper快速创建一个Windows Service

    前言 今天介绍一个小工具的使用.我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我 ...

  2. iOS开发之地图与定位

    无论是QQ还是微信的移动客户端都少不了定位功能,之前在微信demo中没有添加定位功能,今天就写个定位的小demo来了解一下定位和地图的东西.地图和定位看上去是挺高大上一东西,其实用法比TableVie ...

  3. Ubuntu杂记——Ubuntu自带拼音输入发杂乱不堪

    打开终端,用管理员权限输入ibus-daemon -drx,重启即可

  4. 为SharePoint Server 2013 建立搜索爬行

    当搭建好SharePoint Server 2013 之后系统内的爬行信息是空白的,因此需要进行搜索爬行行为的开启. 确认系统上的服务 首先进入到系统的服务中services.msc 确保如下的Sha ...

  5. JavaScript中typeof、toString、instanceof、constructor与in

    JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScrip ...

  6. Android之vector代码修改颜色

    前言:google给了很多material design icon,在开发过程中,可以下载下来直接使用,下载地址为https://materialdesignicons.com/ . 1.下载图标,并 ...

  7. Oracle段收缩功能

    1.了解段收缩 2.自动执行Segment Advisor 3.收缩段 1. 了解段收缩 应用场景:如果对一张表频繁执行插入.更新和删除操作,时间长了可能会出现大量碎片,Oracle针对这种场景推出段 ...

  8. SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

    前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...

  9. js修改不了input的值

    奇怪的input 今天想做一个通过点击按钮,修改input值的控件,但是点击按钮后,input值变成修改的值后又变回了原来的值,百思不得其解,代码如下 <form> <div cla ...

  10. mysql创建定时执行存储过程任务

    sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...