IOS 表视图(UITableVIew)的使用方法(2)名单的分段显示
我们可以采用名字分段法,名字分段会在之后的小节中显示,这是转而使用球员的角色分段发,以最直接的入手点讲解好UITableView的分段使用方法。本节示例时基于上节的SimpleTableViewController可以作为这里的父类,创建一个名为SectionTableViewController的类,继承自SimpleTableViewController,头文件声明如下:
#import "HBSimpleTableViewController.h" @interface HBSectionTableViewController : HBSimpleTableViewController @end
随后有必要对数据源的制作进行改善,使其变成分角色的类别
-(void)initData
{
//承认SimpleTableView中的数据源有效性
[super initData]; //最终的新数据源
NSMutableArray *arrSectionDatasource=[NSMutableArray arrayWithCapacity:];
//记录着当前已经使用的段名
NSMutableArray *arrSection = [NSMutableArray arrayWithCapacity:];
//临时存放一个段名下的所有球员对象
NSMutableArray *arrTmp = [NSMutableArray arrayWithCapacity:]; //对于所有球员进行遍历
for (HBPlayerInfo *onePlayer in self.datasource) {
NSString *role=onePlayer.role;
//如果当前球员的role已经被作为段名只做好,则continue
//也意味着当前球员已经被加入到最终数据源中
if([arrSection containsObject:role])
{
continue;
} //新的role
//再次遍历球员
for (HBPlayerInfo *rolePlayer in self.datasource) {
if([rolePlayer.role isEqualToString:role])
{
[arrTmp addObject:rolePlayer];
}
} //此role被作为一个段名,制作完成
[arrSection addObject:role]; //arrTmp中包含着所有满足当前role段名的球员对象
//加到最终的数据源中
[arrSectionDatasource addObject:arrTmp]; //重置arrTmp
//等待新的role将所有满足的球员对象加进来
arrTmp=[NSMutableArray arrayWithCapacity:];
} //重置数据源
if (_datasource) {
_datasource=nil;
}
_datasource=[[NSArray alloc] initWithArray:arrSectionDatasource];
}
(1)告诉UITableView一共分成几段,之前SimpleTableViewController没有实现此方法,所以默认的时一段,多段的代码如下:
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.datasource.count;
}
(2)告诉UITableView每段的段名。由于每个子数组中元素的role内容都相同,可以取第一个元素访问
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
HBPlayerInfo *onePlay=[((NSArray *)[self.datasource objectAtIndex:section]) objectAtIndex:];
return onePlay.role;
}
表视图“行制作”回调函数重新访问新数据源,修改如下
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return ((NSArray *)[self.datasource objectAtIndex:section]).count;
} -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier=@"sectionTableViewCellId";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell==nil)
{
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
} //取得每个球员的方法和SimpleTableViewController有所不同
HBPlayerInfo *onePlayer=nil;
NSArray *arrSectionPlayer=[self.datasource objectAtIndex:indexPath.section];
if(arrSectionPlayer && arrSectionPlayer.count>indexPath.row)
{
onePlayer =[arrSectionPlayer objectAtIndex:indexPath.row];
}
if (onePlayer) {
cell.textLabel.text=onePlayer.name;
}
return cell;
}
程序运行效果如下:
IOS 表视图(UITableVIew)的使用方法(2)名单的分段显示的更多相关文章
- IOS 表视图(UITableVIew)的使用方法(3)名单的索引显示
当数据量特别大时,简单地以role进行分段,对实际查找的效率提升并不大.就像上一节开头所说,开发者可以根据球员名字的首字母进行分段,且分成26段.由于段数较多,可以使用UITableView的索引机制 ...
- IOS 表视图(UITableVIew)的使用方法(6)表视图的编辑功能(新增Add)
表视图的新增功能和删除功能虽然目的不同,但是工作流程是相似的 下面列出在处理新增的回调函数时,与删除所不同的逻辑部分代码. 显示下过如下: #pragma mark #pragma mark Tabl ...
- iOS 表视图(UITableVIew)的使用方法(1)表视图的示例
表视图继承自UIScrollView,所以有着大多UIScrollView的操作特性,诸如手指控制内容的滚动,内容视图到顶端或者低端时的自动反弹等.配合UINavigationController的导 ...
- IOS 表视图(UITableVIew)的使用方法(8)表视图的编辑功能(多选)
在表视图的删除操作中,每次只能够对其中一个单元进行删除,如果想要同时删除多条记录,不得不挨个地进行标准的删除操作 所以如果能够实现多选的机制,无论是删除还是其他功能的嫁接,都会变得更加方便 当UITa ...
- IOS 表视图(UITableVIew)的使用方法(5)表视图的编辑功能(删除)
默认的,如果表视图支持编辑,那用户可以通过两种方式来删除某些行,其一为单击左侧的红色按钮后行右侧显示“Delete”按钮,其二为在单元行上的手指向左滑动,“Delete”按钮也会出现供用户单击.无论哪 ...
- IOS 表视图(UITableVIew)的使用方法(7)表视图的编辑功能(拖拉调整排序位置)
除了每个单元行左边的删除和新增图标,UITableView还支持在单元行的右侧显示一个供用户拖拉调整排序位置的控件. 不过如果要显示此控件,UITableView的数据源需要实现以下的方法. -(vo ...
- IOS 表视图(UITableVIew)的使用方法(4)自定义表视图单元
UITableViewCell的自定义往往需要自建一个UITableViewCell的子类后进行作业.开发者可以选择通过xib或者直接在UITableViewCell的布局中进行UITableView ...
- IOS 表视图UITableView 束NSBundle
今天搞了一下表视图UITableView 表视图是在以后应用程序开发中经常用到的一个视图,所以必须要熟练掌握 所获不多,对视图有了一个大概的了解 其中有用到NSBundle , 束 这个类 先说一 ...
- IOS开发之表视图(UITableView)
IOS开发之表视图(UITableView)的基本介绍(一) (一):UITableView的基本概念 1.在IOS开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...
随机推荐
- 开源点评:Protocol Buffers介绍
今天来介绍一下“Protocol Buffers”(下面简称protobuf)这个玩意儿.本来俺在构思“生产者/消费者模式 ”系列的下一个帖子:关于生产者和消费者之间的传输数据格式.因为里面扯到了pr ...
- 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...
- 集合的实现 -- 数据结构与算法的javascript描述 第九章
集合 集合(set)是一种包含不同元素的数据结构. 集合中的元素称为成员. 集合的两个最重要特性是:首先,集合中的成员是无序的:其次,集合中不允许相同成员存在. code function Set() ...
- 保护眼睛,绿豆沙颜色的RGB值和HSL值
现在的人尤其是职场中人,每天都得花很长时间对着电脑,对眼睛的伤害很大,其实我们可以对电脑进行一个简单的设置,把窗口背景设置成绿豆沙颜色的,对眼睛的保护很有帮助的. 下面是绿豆沙颜色的RGB值和HSL值 ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
- BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )
BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...
- uva 10779 Collectors Problem 网络流
链接 一共有n个人, m种收藏品, 每个人拥有的收藏品的种类和个数都是不相同的. 假设2-n这些人都只和1互相交换, 比例是1:1, 并且, 2-n这些人, 只换自己现在没有的, 如果他现在有第二种, ...
- 【LeetCode题意分析&解答】41. First Missing Positive
Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] ...
- Linux系统管理员:不要害怕升级内核
Linux系统管理员平时很重要的一项工作就是负责系统内核升级.做好系统内核的升级工作,对于Linux系 统的稳定性具有至关重要的作用.但是很少有人敢贸然的对Linux系统的内核进行升级,担心会影响现有 ...
- HDU 5724 Chess(博弈论)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5724 [题目大意] 给出一个n行,每行有20格的棋盘,棋盘上有一些棋子,每次操作可以选择其中一个棋 ...