TreeView 1.1.3

TreeView 1.1.3

kernel 维护。



TreeView 1.1.3

  • 作者
  • kernel

Swift 注解

TreeView 用 Objective-C 编写,完全兼容 Swift。查看 swift-example 分支,了解它与 Swift 如何配合。

TreeView

组件,可向任何位于控制器视图中的 UITableView 添加 cells + 子 cells 支持。

YouTube 上的示例: http://youtu.be/zS3gQ4pnmBs

TreeView 是一个“代理”对象,位于 tableView 和视图控制器之间,代理所有数据源调用,并将类似 2D 的 indexPaths 转换成 N 层索引路径 (0-0, 0-0-1, 0-0-2, 0-1-0-1, ...)。

通常在您的 UITableViewCell 想要包含自己的子 cells,并且可以轻松显示/隐藏子 cells 时使用 TreeView 组件。

示例

查看 3 个分支: fsTree-exampleallExpanded-exampleplistDatasource-example,了解如何为表格视图实现子 cells 支持。

实现细节

TreeView 为每个单元格添加了两个逻辑状态: 展开折叠

您应该展开单元格以显示其子 cells。

考虑到这一点,通过 UITableView 分类实现了辅助方法

func expand(treeIndexPath: IndexPath)
func isExpanded(treeIndexPath: IndexPath) -> Bool
func collapse(treeIndexPath: IndexPath)

在您的控制器中实现 UITableViewDataSource 而不是实现 TreeTableDataSource。TreeTableDataSource 协议通过引入 2 个新的必需方法来扩展 UITableViewDataSource。

func tableView(_ tableView: UITableView, isCellExpandedAt treeIndexPath: IndexPath) -> Bool
func tableView(_ tableView: UITableView, numberOfSubCellsForCellAt treeIndexPath: IndexPath) -> Int

注意所有 必需 的 dataSource 方法都使用 N 深度 indexPath 调用,该 indexPath 唯一地标识单元格或子单元格。
因此,您应该修改以下方法的逻辑

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
func tableView(tableView: UITableView, cellForRowAt treeIndexPath: IndexPath) -> UITableViewCell

并使用以下内容

func tableIndexPathFromTreePath(treeIndexPath: IndexPath) -> IndexPath

如果您需要将 N 深度 indexPath 转换为 2d indexPath。

另一方面,所有 可选 方法都被透明地转发到您的实现中(如果存在),并且不更改 indexPath 参数 - 它是 2d indexPath。您可以使用以下方法将其转换为 N 深度 treeIndexPath。

func treeIndexPathFromTablePath(indexPath: NSIndexPath) -> NSIndexPath

方法。

安装

TreeView 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile

pod 'TreeView'

结论

使用 TreeView 可以有任意数量的单元格-子单元格级别。例如
单元格级别及其 indexPaths 表示

  • section 0
    • [0, 0]
    • [0, 1]
    • [0, ...]
  • section 1
    • [1, 0]
    • [1, 1]
      • [1, 1, 0]
      • [1, 1, 1]
      • [1, 1, ...]
    • [1, 2]
      • [1, 2, 0]
  • section 2
    • [2, 0]
    • [2, 1]
    • [2, 2]
    • [2, 3]
    • [2, ...]
  • [...]


仅在通过 2d indexPaths 暴露的 UITableView 数据结构中。例如:- section 0 - [0, 1] - [0, 2] - [0, 3] - [0, ...] - section 1 - [1, 0] - [1, 1] - [1, 2] - [1, ...] - section ...

查看演示应用程序示例,该示例表示此概念的实际应用。

Concept

待办事项

* 测试单元格在不同部分之间的移动。