【转】 iOS如何实现表格的折叠效果?
原文 : http://blog.csdn.net/youcanping2008/article/details/9202167
一、实现原理:就是在点击表格组头视图的时候,如果该表格视图的组展开了,就把改组的行设置为0,如果该组隐藏了,就显示该组的所有行。
效果如下:
二、实现步骤
1、定义一个数据模型用于封装数据
#import <Foundation/Foundation.h> @interface MyData : NSObject
{
NSMutableArray *_array;// 每组的数据
BOOL _isShow;// 组的状态,yes显示组,no不显示组
NSString *_name;// 组名
}
@property (nonatomic,retain) NSMutableArray *array;
@property (nonatomic,copy) NSString * name;
@property (nonatomic,assign) BOOL isShow;
@end
2、添加数据源
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// 全局的数据源
dataArray = [[NSMutableArray alloc] init];
// 添加数据
for (int i='A'; i<='Z'; i++) {
MyData *myData = [[MyData alloc] init];
myData.name = [NSString stringWithFormat:@"%c",i];
for (int j=; j<; j++) {
[myData.array addObject:[NSString stringWithFormat:@"%c-%d",i,j]];
}
[dataArray addObject:myData];
}
myTableView = [[UITableView alloc] initWithFrame:CGRectMake(, , , -) style:UITableViewStylePlain];
myTableView.dataSource = self;
myTableView.delegate = self;
myTableView.rowHeight = ;
[self.view addSubview:myTableView];
}
3.实现表格的代理方法
// 组数
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return [dataArray count];
}
// 根据状态来判断是否显示该组,隐藏组把组的行数设置为0即可
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
MyData *data = [dataArray objectAtIndex:section];
if ([data isShow]) {
return [[data array] count];
}else{
return ;
}
}
// 添加每行显示的内容
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellName = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName ];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName] autorelease];
}
MyData *data = [dataArray objectAtIndex:indexPath.section];
NSString *str = [[data array] objectAtIndex:indexPath.row];
cell.textLabel.text = str;
return cell;
}
4.自定义组的头标题视图,添加点击事件
// 定义头标题的视图,添加点击事件
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
MyData *data = [dataArray objectAtIndex:section]; UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(, , , );
[btn setTitle:data.name forState:UIControlStateNormal];
btn.tag = section;
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
if (section%) {
btn.backgroundColor = [UIColor darkGrayColor];
}else{
btn.backgroundColor = [UIColor lightGrayColor];
}
return btn;
}
- (void) btnClick:(UIButton *)btn
{
MyData *data = [dataArray objectAtIndex:btn.tag];
// 改变组的显示状态
if ([data isShow]) {
[data setIsShow:NO];
}else{
[data setIsShow:YES];
}
// 刷新点击的组标题,动画使用卡片
[myTableView reloadSections:[NSIndexSet indexSetWithIndex:btn.tag] withRowAnimation:UITableViewRowAnimationFade];
}
【转】 iOS如何实现表格的折叠效果?的更多相关文章
- iOS图片折叠效果:Layer的contentsRect属性和渐变层
http://www.cocoachina.com/ios/20150722/12622.html 作者:@吖了个峥 授权本站转载. 前言 此次文章,讲述的是Layer的一个属性contentsRec ...
- jQuery treetable【表格多重折叠树功能及拖放表格子元素重新排列】
今天有个表格需求做到多重折叠子元素功能,仔细想了下实现原理, 1.在html中,把父子节点的关系写在自定义属性,但对于节点是否有孩子(hasChild),是否是最后一个节点(isLastOne),是否 ...
- 创意设计展示:折叠效果在移动 App 中的应用
在今天在移动 App 界面设计中,你可以看到不同创意类型的视觉效果.特别是在 Dribbble 上面,有有很多应用程序的 UI 概念设计,让你惊叹.当然,他们大多只是作为一个概念设计,可能永远也不会成 ...
- css3折叠效果
在开发过程中,经常会遇到一些交互效果,今天所联系的便是一个类似折纸的折叠效果,查看效果. 说到折纸,我们先看下图 这是我第一时间想到的大体思路,如果能让这6个面连续的变化角度到0不就可以了吗,运用cs ...
- jQuery文本段落展开和折叠效果
<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...
- jq菜单折叠效果
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- BootStrap入门教程 (四) :JQuery类库插件(模态窗口,滚动监控,标签效果,提示效果,“泡芙”效果,警告区域,折叠效果,旋转木马,输入提示)
上讲回顾:Bootstrap组件丰富同时具有良好可扩展性,能够很好地应用在生产环境.这些组件包括按钮(Button),导航(Navigation),缩略图( thumbnails),提醒(Alert) ...
- 实现类似QQ的折叠效果
// 主要核心是点击自定义header来展开和收起每一组里面的cell,模型里面应该有isShow此属性来记录开展还是收起. // ViewController.m// 实现类似QQ的折叠效果/ ...
- Swift 2.0 封装图片折叠效果
文/猫爪(简书作者)原文链接:http://www.jianshu.com/p/688c491580e3著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 用Swift封装图片折叠效果 b ...
随机推荐
- 【技术贴】同一台机器Tomcat7多版本共存配置文档
首先准备好自己下载的Tomcat7的绿色版,一定要是解压的绿色版不能使exe安装包.因为exe安装版很多变量不好配置,我以前最喜欢exe版了,方便快捷,但是我发现还是绿色解压版比较好,优化配置等也很好 ...
- I2C转UART
I2C转UART,51单片机普通IO口模拟I2C从机,解决UART不够的问题 /************************************************************ ...
- -_-#【工具】图片导出PDF
- vim学习与理解
1. 转变思维 --> vim 无鼠标文本编辑工具 在鸟哥的linux私房菜中,是这么说明linux的: 1. vim是linux like系统中非常强大的一个文本编辑工具,历史悠久,很多系统都 ...
- QTP自传之对象
对象在手,测试我有 大家别误会,这里说的对象可不是值指男女朋友,而是对被测控件的识别.经过昨天的录制,大家一定很奇怪为什么我可以做到精确的回放操作,这都要归功于对象,下面就隆重的介绍我在对象识别方面的 ...
- 原生JavaScript拖动div兼容多种浏览器
说句题外话,虽然博客园嵌入式氛围不行,Web前端氛围还是很好的.我又从 chinaunix 回来了. <html> <head> <script type="t ...
- EasyUI-DataGrid之批量删除
简单介绍一下,涉及到的几个知识点: 1.checkbox,多选 2.前台到后台传值,我用的是字符串拼接,到了后台在拆分的方式 3.批量删除的底层实现 效果图 前台view <table id=& ...
- python关键字、转义符和字符串格式化
最近在学learn python the hard way,学习到第37章,进行了关于关键字.转义符和字符串格式化的总结.看手头上的中文版没有及时更新.于是就把这些翻译过来,以作查阅. 关键字: 关键 ...
- Storm-1.0.1+ZooKeeper-3.4.8+Netty-4.1.3 HA集群安装
Storm-1.0.1+ZooKeeper-3.4.8+Netty-4.1.3 HA集群安装 下载Storm-1.0.1 http://mirrors.tuna.tsinghua.edu.cn/apa ...
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...