iOS Swift TableView实现树形结构列表(开展收起动画、支持无限层级)
效果:
效果
代码结构:
image.png
可以看到分别是4种不同层级的的cell。
使用方法:
1、先理解TableViewManager的使用方法。
2、建立自己的cell的时候,对应的item继承ZJExpandTreeCellItem
3、以下面代码为例,总共是4层(level 0 ~ level 3),第1层开展,第2层收起(所以实际上看不到3、4层,由于第2层是收起状态),第3层收起,第4层收起(最后一层)。这样这个树形结构的列表就写好了,开展和收起动作框架内会利用递归自动解决。
Demo里是4层层结构,实际上支持无限层级
//level 0 let item0 = Level0CellItem() item0.level = 0 section.add(item: item0) //假如isExpand为true,则下一级的item(也就是item1)必需加入section item0.isExpand = true //level 1 for _ in 0..<3 { let item1 = Level1CellItem() //level仅用于记录层级,可以不赋值 item1.level = 1 item1.isExpand = false section.add(item: item1) item0.arrNextLevel.append(item1) //level 2 for _ in 0..<3 { let item2 = Level2CellItem() //假如isExpand为false,则后面就不用把item加入section item2.isExpand = false item1.arrNextLevel.append(item2) //level 3 for _ in 0..<3 { let item3 = Level3CellItem() item3.isExpand = false item2.arrNextLevel.append(item3) } } } manager.reload()效果:
image.png
ZJExpandTreeCellItem则是负责控制开展收起的核心代码(继承它就可,不需要理解里面的逻辑,这里只是展现一下):
class ZJExpandTreeCellItem: ZJTableViewItem { var level:Int = 0 var isExpand = true var arrNextLevel = [ZJExpandTreeCellItem]() override init() { super.init() self.selectionStyle = .none self.setSelectionHandler { (callBackItem) in let item = callBackItem as! ZJExpandTreeCellItem var arrItems = [ZJExpandTreeCellItem]() if item.isExpand { //点击之前是打开的,直接通过递归获取item self.recursionForItem(item, outItems: &arrItems) item.isExpand = !item.isExpand }else{ //点击之前是关闭的,需要先改变isExpand属性(不这么做会导致这一个level下一级的level的cell不显示) item.isExpand = !item.isExpand self.recursionForItem(item, outItems: &arrItems) } if item.isExpand { item.section.insert(arrItems, afterItem: item, animate: .fade) }else{ item.section.delete(arrItems, afterItem: item, animate: .fade) } } } /// 递归获取一个item下面所有显示的item func recursionForItem(_ item: ZJExpandTreeCellItem, outItems: inout [ZJExpandTreeCellItem]) { for subItem in item.arrNextLevel { print(subItem.level) if item.isExpand == true { outItems.append(subItem) if item.arrNextLevel.count != 0{ recursionForItem(subItem, outItems: &outItems) } } } }}level代表当前cell的层级,可以不传值。假如业务逻辑上有需要判断层级的情况,可以对level赋值,获取当前层级。isExpand代表当前cell下的子一级cell能否是开展的。arrNextLevel是记录当前cell下的子一级cell。ZJExpandTreeCellItem的init方法里的代码是触发点击动作之后的开展收起动作的解决recursionForItem方法通过递归获取到当前点击中的cell下面所有层级的cell
Demo地址:在ZJTableViewManager中ExpandTree页面
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS Swift TableView实现树形结构列表(开展收起动画、支持无限层级)
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS Swift TableView实现树形结构列表(开展收起动画、支持无限层级)