LNZTreeView
这是一个为 iOS 实现的树视图。树视图是树的图形表示。每个元素(节点)可以包含多个子元素(子节点)。
此 TreeView 实现将节点和子节点组织成行,每个节点都有一个缩进,以指示元素的层级结构。父节点可以展开或折叠,每个子节点本身也可以作为一个父节点,包含更多子节点。
基本原理
LNZTreeView 是在 UITableView 上构建的一个视图。它代理了 UITableView 的代理和方法,以便可以对这些 API 进行分层使用。
它可以与任何符合 TreeNode
协议的实体一起工作。
单元格
与 UITableView 类似,在 LNZTreeView
中可以使用自定义单元格。您可以使用 register(_ cellClass: AnyClass?, forCellReuseIdentifier identifier: String)
和 register(_ nib: UINib?, forCellReuseIdentifier identifier: String)
方法将单元格类注册到特定单元格标识符。
与 UITableView
类似,您可以使用 dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell
和 dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
方法来获取之前使用注册方法指定的单元格实例。
代理和数据源
数据源负责根据您设置的数据填充TreeView。为了提高效率,如果需要,LNZTreeView会查询其数据源以获取渲染行所需的信息。数据源方法中的所有indexPath都是相对于参数parentNode的。
例如
root
--- element A
--- --- sub element A
--- --- sub element B
--- --- sub element C
--- element B
在这种情况下,带有parentNode
中行1的IndexPath等于元素A
,将代表子元素B
。与UITableView的section类似,IndexPath表示要渲染的section的索引。如果parentNode
为nil,则indexPath相对于根节点。
示例
root A
--- element AA
--- --- sub element AA
--- --- sub element AB
--- --- sub element AC
--- element AB
root B
在这种情况下,带有parentNode
中行1的IndexPath等于nil,将代表根B
。
在代理中,所有indexPath的逻辑都相同。
选中一个节点时,如果该节点可展开,则它会自动展开;如果已展开,则它会自动折叠。通过方法treeView(_ treeView: LNZTreeView, didExpandNodeAt indexPath: IndexPath, forParentNode parentNode: TreeNode?)
和treeView(_ treeView: LNZTreeView, didCollapseNodeAt indexPath: IndexPath, forParentNode parentNode: TreeNode?)
,代理将得知这些事件。如果节点不可展开(或不可折叠),将调用方法treeView(_ treeView: LNZTreeView, didSelectNodeAt indexPath: IndexPath, forParentNode parentNode: TreeNode?)
。
安装
您可以通过cocoapods安装LNZTreeView
use_frameworks!
pod 'LNZTreeView'