iOS Swift TableView实现树形结构列表(开展收起动画、支持无限层级)

作者 : 开心源码 本文共2094个字,预计阅读时间需要6分钟 发布时间: 2022-05-13 共418人阅读

效果:

效果

代码结构:

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。
ZJExpandTreeCellIteminit方法里的代码是触发点击动作之后的开展收起动作的解决
recursionForItem方法通过递归获取到当前点击中的cell下面所有层级的cell

Demo地址:在ZJTableViewManager中ExpandTree页面

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS Swift TableView实现树形结构列表(开展收起动画、支持无限层级)

发表回复