LNZTreeView 1.1.2

LNZTreeView 1.1.2

Giuseppe Lanza 维护。



  • 作者
  • Giuseppe Lanza

Build Status codecov Swift

LNZTreeView

这是一个为 iOS 实现的树视图。树视图是树的图形表示。每个元素(节点)可以包含多个子元素(子节点)。

此 TreeView 实现将节点和子节点组织成行,每个节点都有一个缩进,以指示元素的层级结构。父节点可以展开或折叠,每个子节点本身也可以作为一个父节点,包含更多子节点。

LNZTreeView

基本原理

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) -> UITableViewCelldequeueReusableCell(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'