自定义TableViewCell展开下拉列表

 

自定义TableViewCell展开下拉列表

从学校出来也有好几个月了,刚踏出校门时,来到公司,带我的师傅问我TCP/IP,我愣住了,后来他问我网线里面有几根线,我更是无言以对,稍微还是有些尴尬,反应出我的知识面是多么的狭窄,这是做为一个开发人员的莫大的悲哀,因为不善于终结学习的方法,不能一最快的速度领悟新的知识,新的技术,这是程序员莫大的悲哀,如果长期如此,程序员这条路不会长久的。现在我写这篇文章,也只是一个菜鸟在这条出路上前行摸索,有不到位的地方,还希望各位大神多多指点。首先给大家展示一下效果图。

可展开关闭的树形结构效果图

要实现这种可展开可关闭的树形结构,我终结了至少需要如下几个知识点:1、数据源。2自定义可缩进的tableviewcell。3、数据结构中树的知识。

一、数据源

很明显这是一个树形列表的展开,就像文件夹一样可以一层一层的展开。也不知道究竟嵌套了多少层,这就要看数据源。要实现这种树形结构的展开,至关重要的是要有类似树形结构的数据,你也可以用plist来构造一份类似树形结构的数据。这个是树形结构的数据,当然或多或少和数据结构里面的树有一些联系,我还是用到了一些树的思想。首先就是封装一个节点类,节点类里面主要有、节点的名字、节点的ID、父节点的名字,父节点的ID、孩子节点字典、节点缩进的级别、节点是否可以展开,节点是否还有孩子节点等变量。就可以把父节点作为孩子字典的key,这个孩子字典里面的值就是这个节点下的孩子节点。然后把这些节点在放到数组里面,就可以通过父节点找到该节点下的孩子节点。如果要找到跟节点下的所有孩子节点,就要通过递归调用来找了。下面是这个节点类的代码。

二、自定义可缩进的tableviewcell

要体现出这种上下级的关系,就需要缩进了,呈现出树的层级关系。除了这种层级关系,最重要的是还要可以关闭和展开。其实要实现这种结构和功能的主要思想就是,点击展开按钮后,找到这一行的孩子节点,然后把这些孩子节点插入tableview中这一行下面,这行下面的其他数据后移就想了。如果要关闭某一行下面的孩子节点,首先要找到这一行下面的所有的孩子节点,然后把这些孩子节点从tableview里面移除。

首先就是要做到缩进,可能大家都知道tableview协议函数-(NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath可以做到缩进行。但是我发现这个缩进在IOS7和IOS6中体现出来的效果还不一样。在IOS7中这个缩进只有对cell中textLable有效果,然而在IOS6中对cell左边的imageview也有效果。在加上cell上面还有一个按钮来做展开和关闭的操作,索性就自定义了。这样各个版本中体现出来的效果还可以保持一致。自定义的cell在这个类里面,我自己写了一个函数来处理缩进。思路就是加载cell的时候会调用-(void)layoutSubviews,然后根据树形结构里面的数据的缩进级别来刷新cell里面各个元素的位置,这样绘制出来的行看起来就有缩进效果了。

三、可展开和关闭子层列表

在同一个tabelView里实现展开和关闭子层列表,使tableview可以灵活的展示这些层级关系的数据。那我又是怎样展开和关闭这些数据的呢?展开和关闭子层列表都是要在数据源里面找到这些子层的数据,这里要用到递归的思想,找到了这些数据,展开就是把这些数据在tableview里面点击这一行的下一行插入这些数据,关闭也就是移除这些数据了。要在tableviewcell里面某一行的下一行插入一些数据,tableview里面 insertRowsAtIndexPathswithRowAnimation:这个函数可以做到,deleteRowsAtIndexpaths

withRowAnimation。这样就可以动态的实现展开和关闭。

第一次写这技术上的东西,可能有些言不达意。各位大神些见笑了。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值