先看界面
一级列表主要用的自定义的UITableViewHeaderFooterView,二级列表和三级列表则采用自定义的cell。该控件可以扩展第四级,第五级等,但需要修改代码以及数据源,这个可以自己参考代码修改。
界面代码较为简单,这里就不展示了,展示主要的代码。
记录展开的核心代码
func expandNodes(section : Int, parentID:String,index:Int)->Int{
var insertindex = index
for i in 0..<companys[section].subNodes.count {
let node = companys[section].subNodes[i]
//找到父节点是parentID的子节点
if node.parentID == parentID {
if !self.preservation { //是否保留所有子cell的展开状态
node.expand = false
}
//展开节点的后面+1的位置
insertindex += 1
//根据展开顺序排列
tempNodes[section].insert(node, at: insertindex)
//存储插入的位置
reloadArray.append(IndexPath(row: insertindex, section: section))
//遍历子节点的子节点进行展开
if node.expand {
insertindex = expandNodes(section : section, parentID: node.ownID, index: insertindex)
}
}
}
return insertindex
}
记录收起的数据
func foldNodes(section : Int,level:Int,currentIndex:Int){
if currentIndex+1<tempNodes[section].count {
let tempArr = NSArray(array: tempNodes[section])
let startI = currentIndex+1
var endI = currentIndex
for i in (currentIndex+1)..<(tempArr.count) {
let node = tempArr[i] as! MLNodelObj
if node.level <= level {
break
}else{
endI += 1
reloadArray.append(IndexPath(row: i, section: section))
}
}
if endI >= startI {
tempNodes[section].removeSubrange(startI...endI)
}
}
}
Code4App地址:http://www.code4app.com/forum.php?mod=viewthread&tid=14656&extra=
github地址:https://github.com/ljmkimqx/LJMMultiLevelTableView