iOS中的二级菜单及Cell的展开收起示例

 更新时间:2017年08月22日 09:02:00   作者:万之子  
本篇文章主要介绍了iOS中的二级菜单及Cell的展开收起示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

最近又做了一个项目,涉及到二级菜单及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 button响应流程图文详解

    iOS button响应流程图文详解

    这篇文章主要为大家介绍了iOS button响应流程图文详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 一行代码实现IOS 3DES加密解密

    一行代码实现IOS 3DES加密解密

    这篇文章主要介绍了一行代码实现IOS 3DES加密解密的相关资料,需要的朋友可以参考下
    2015-12-12
  • iOS 封装导航栏及返回,获取控件所在控制器的实例

    iOS 封装导航栏及返回,获取控件所在控制器的实例

    下面小编就为大家分享一篇iOS 封装导航栏及返回,获取控件所在控制器的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • iOS开发之UITableView详解

    iOS开发之UITableView详解

    在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似于微信、QQ、新浪微博等软件基本上随处都是UITableView。当然它的广泛使用自然离不开它强大的功能,今天这篇文章将针对UITableView重点展开讨论
    2016-04-04
  • IOS setOnclick点击事件分析

    IOS setOnclick点击事件分析

    本篇文章给大家整理了IOS setOnclick点击事件完美扩展的相关知识点以及代码实例,有需要的朋友可以跟着测试学习下。
    2018-05-05
  • iOS10 适配远程推送功能实现代码

    iOS10 适配远程推送功能实现代码

    这篇文章主要介绍了iOS10 适配远程推送功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • iOS字体抖动动画的实现代码

    iOS字体抖动动画的实现代码

    这篇文章主要介绍了iOS字体抖动动画的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • iOS 11 BUG的发现、定位和解决

    iOS 11 BUG的发现、定位和解决

    这篇文章主要为大家详细介绍了iOS 11 BUG的发现、定位和解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android开发笔记之简单基站定位程序的实现

    Android开发笔记之简单基站定位程序的实现

    这篇文章主要介绍了Android开发笔记之简单基站定位程序的实现,详细的介绍了基站定位其实很简单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • IOS观察者设计模式

    IOS观察者设计模式

    什么是观察者模式 什么是观察者模式?你曾经订阅过报纸吗?在订阅报纸的时候,你不用去任何地方,只需要将你的个人地址信息以及订阅信息告诉出版社,出版社就知道如何将相关报纸传递,本文给大家介绍ios观察者模式,感兴趣的朋友一起看看吧
    2015-12-12

最新评论