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开发中,表视图的应用十分广泛和普及.因此掌握表视图的用法显得非常重要.一般情况下对于 ...
随机推荐
- Rabbit and Grass(杭电1849)(尼姆博弈)
Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hahahahah
dsfsefesfsffsfsfsfsfesfsfsfsfsfsfspackage realm; import java.util.ArrayList; import java.util.List ...
- image元素的src属性值与getAttribute('src')值
采集的时候,当采集到一些不可用的照片就将其剔除掉 我的解决思路是new一个img对象, 然后将采集过来的图片赋值给这个img, 然后分别处理img的onerror和 onload, 当在onerror ...
- PS学习
PS快捷键大全(转自UI中国PS教程) 摆脱鼠标流就靠这张图了!!!! 查看图像 使用导航器查看图像 选择窗口-->导航器 菜单命令 使用缩放工具查看图像 ctrl++ 以画布大小放大图像 ct ...
- 性能优化工具---vmstat
作用: 报告关于内核线程.虚拟内存.磁盘.陷阱和 CPU 活动的统计信息 参数: 通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数 显示说明: 第一行数据反映开 ...
- BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )
一个串a在b中出现, 那么a是b的某些前缀的后缀, 所以搞出AC自动机, 按fail反向建树, 然后查询(x, y)就是y的子树中有多少是x的前缀. 离线, 对AC自动机DFS一遍, 用dfs序+树状 ...
- Spark源码学习2
转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...
- IOS 特定于设备的开发:使用加速器启动屏幕上的对象
借助一点编程工作,iPhone的机载加速计就可以使对象在屏幕上四处“移动”,实时响应用户倾斜手机的方式.下面的代码就是创建一个动画式的蝴蝶,用户可以使之快速移过屏幕. 使之工作的秘密在于:向程序中添加 ...
- django学习之Model(五)MakingQuery
接着上篇. 10-一次更新多个对象 有时想要对QuerySet中的所有对象的某一个field来设定一个值,这时候可以像下边这样用update(): # Update all the headlines ...
- 剑指offer——stack与queue的互相实现
我们知道,stack和queue是C++中常见的container.下面,我们来探究下如何以stack来实现queue,以及如何用queue来实现stack. 首先,先了解下stack与queue的基 ...