最近又做了一个项目,涉及到二级菜单及cell的展开收起,这是我所做过的第三个项目中做这个功能了,我当然不能把公司的项目界面show出来,所以我重新创建一个工程,数据都写的是固定的数据。作为总结,记录实现过程,及要注意的一些点:如进来默认选中第一行,数据优化等。

先看看我们实现的效果:
基本UI布局思路:
1.将view分为左右两部分,左,右分别是一个tableView
2.点击左边的cell时候,刷新右边的数据
需要注意及处理的点有:
1.默认进来界面显示左边选中第一行,及对应右边的数据
2.每次点击左边的cell,右边都需要刷新数据,如果每次点击左边都要请求一次数据,那么会很消耗用户的流量
3.cell的展开收起我们通过cell 的高度变化实现
在这里主要罗列需要注意的那三点,功能的全部实现我已经提交到github,需要的伙伴,可以去下载https://github.com/mumuna/AboutCell
首先说明,一般类似这样的布局,后台提供接口,左边的tableview的数据源会是一个接口,左边的tableview的每个cell对应的右边的数据也是一个接口,但是不同的cell需要传入id请求获取对应的数据,这样每点击一个左边的cell就需要请求一次右边的数据。
1.初次进入界面默认显示左边第一行及对应的右边的数据,及数据优化
(1)首先获取到左边的tableview所需的数据及第一行对应的右边的数据
(2)其它cell对应的右边的数据我们在tableView didSelectRowAtIndexPath 方法中请求获得
(3)默认选中第一行
//默认选中第一行 NSIndexPath *ip=[NSIndexPath indexPathForRow:0 inSection:0]; [leftTable selectRowAtIndexPath:ip animated:YES scrollPosition:UITableViewScrollPositionBottom];
(4)在tableView didSelectRowAtIndexPath 方法中,根据点击的左边的cell,请求右边的数据。我们不能每次点击都请求一次,这样很耗费用户的流量。
我们需要把右边的数据放在可变数组里arr,全部初始化arr = [NSMutable array];,每次点击,先判断arr.count ==0 ,如果!=0 再去请求数据,然后reload data。
2.cell的弹开和收起
在效果图中可以看到点击tableview的区的headerview,对应区的row会弹开收起。
(1)我们在获取数据的时候,创建一个数组,给每个区的headerview一个标志“0”,即默认为收起
//specificaArr是效果图中左边的cell英国,对应的右边的数据源
//flagArr是左边对每个区的标识
for (int i = 0; i<specificArr.count; i++) {
[flagArr addObject:@"0"];
}
(2)给headerview添加一个手势,且给headerview一个tag值方便在手势响应事件中知道我们具体点击的是哪个区
view.tag = 100+section;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(sectionClick:)];
[view addGestureRecognizer:tap];
(3)在手势响应事件中根据headerview的标识选择展开还是收起row,且改变标识
-(void)sectionClick:(UITapGestureRecognizer *)tap{
//根据tag值获取点击的区
int index = tap.view.tag%100;
//创建可变数据,存储所点击的区的所有行的indexpath,tableview刷新区对应的行,重新设置行高
NSMutableArray *indexArray = [[NSMutableArray alloc]init];
NSArray *arr = specificArr[index];
for (int i = 0; i<arr.count; i++) {
NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:index];
[indexArray addObject:path];
}
//展开
if ([flagArr[index] isEqualToString:@"0"]) {
[flagArr replaceObjectAtIndex:index withObject:@"1"];
[specificTable reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationBottom];
}else{
[flagArr replaceObjectAtIndex:index withObject:@"0"];
[specificTable reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationBottom];
}
}
(4)在tableView heightForRowAtIndexPath方法中设置tableview的高度
if ([flagArr[indexPath.section] isEqualToString:@"0"]) {
return 0;
}else{
return 96;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# iOS
# 二级菜单展开收起
# iOS中的二级菜单收起
# Cell
# 展开收起
# iOS中Cell的Section展开和收起的示例代码
# iOS基于UITableView实现多层展开与收起
# 的是
# 是一个
# 需要注意
# 图中
# 弹开
# 这是
# 在这里
# 放在
# 都要
# 所需
# 要注意
# 英国
# 事件中
# 可以看到
# 做过
# 我所
# 再去
# 能把
# 三点
# 会很
相关文章:
制作网站公司那家好,网络公司是做什么的?
视频网站制作教程,怎么样制作优酷网的小视频?
建站主机选购指南与交易推荐:核心配置解析
江苏网站制作公司有哪些,江苏书法考级官方网站?
如何通过VPS建站无需域名直接访问?
建站之星导航如何优化提升用户体验?
内网网站制作软件,内网的网站如何发布到外网?
高性价比服务器租赁——企业级配置与24小时运维服务
香港服务器选型指南:免备案配置与高效建站方案解析
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何将凡科建站内容保存为本地文件?
建站主机如何安装配置?新手必看操作指南
如何通过PHP快速构建高效问答网站功能?
5种Android数据存储方式汇总
临沂网站制作企业,临沂第三中学官方网站?
网站制作报价单模板图片,小松挖机官方网站报价?
如何选择CMS系统实现快速建站与SEO优化?
网页设计与网站制作内容,怎样注册网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
C++时间戳转换成日期时间的步骤和示例代码
如何在橙子建站中快速调整背景颜色?
如何高效利用亚马逊云主机搭建企业网站?
建站主机SSH密钥生成步骤及常见问题解答?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
建站之星ASP如何实现CMS高效搭建与安全管理?
制作网页的网站有哪些,电脑上怎么做网页?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何在万网ECS上快速搭建专属网站?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
简单实现Android验证码
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
青浦网站制作公司有哪些,苹果官网发货地是哪里?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何在景安云服务器上绑定域名并配置虚拟主机?
宿州网站制作公司兴策,安徽省低保查询网站?
如何通过虚拟机搭建网站?详细步骤解析
如何在云虚拟主机上快速搭建个人网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
如何在腾讯云免费申请建站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何在建站宝盒中设置产品搜索功能?
建站之星免费版是否永久可用?
宝塔建站助手安装配置与建站模板使用全流程解析
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。