如何创建具有多级可展开可折叠行的UITableView?

如何创建具有多级可展开可折叠行的UITableView?,uitableview,rows,expand,collapse,sections,Uitableview,Rows,Expand,Collapse,Sections,我必须创建一个能够在不同级别显示和折叠行的表视图(iPad应用程序): - Client 1 - Category 1 - Info 1 - Info 2 - Category 2 - Info 1 - Info 2 - Category 3 - Info 1 - Info 2 - Client 2 - Category 1 - Info 1 - Info 2 等等 如果用户点击一个客户端行,那么整个与客户端相关的行(该客户端下的类别和信息)应该展开/折

我必须创建一个能够在不同级别显示和折叠行的表视图(iPad应用程序):

- Client 1
 - Category 1
  - Info 1
  - Info 2
 - Category 2
  - Info 1
  - Info 2
 - Category 3
  - Info 1
  - Info 2
- Client 2
 - Category 1
  - Info 1
  - Info 2
等等

如果用户点击一个客户端行,那么整个与客户端相关的行(该客户端下的类别和信息)应该展开/折叠。另一方面,如果他们点击特定类别,则只有该类别应展开/折叠

因此,我计划使用嵌套的NSMutableDictionary来保存我可以通过动态键(如动态客户端名称)访问的数据,但我不确定这种方法是否能够解决实际问题(生成可折叠部分)。此外,我不确定是否只使用行并使它们看起来像标题部分,还是使用实际部分,因为据我所知,我无法制作子部分来实现三级嵌套

有什么想法吗?我看到过一些具有可扩展行的项目示例,但我仍然感到困惑


救命啊

我认为嵌套字典对
–tableView:cellforrowatinexpath:
来说不太方便

下面是一个懒惰的解决方案:

使用
NSMutableArray
UITableView
将行伪装成部分。数组中的每个对象都有一个名为children的属性,类型为
NSMutableArray
。展开父项时,清空子数组并将其插入父项之后。折叠时,继续将项目移动到子项中,直到它碰到与父项级别相同的项目

然后对于动画:
–insertRowsAtIndexPaths:withrowsanimation:
–deleteRowsAtIndexPaths:withrowsanimation:
。无论是
UITableViewRowAnimationTop
还是
UITableViewRowAnimationFade
都会很好看。

GitHub上的库非常适合这类事情。为了演示,我制作了一个。它支持在每个级别使用单元的任何树深度。试着运行


树组件是一项正在进行的工作,但希望它应该是一个良好的开端。

好吧,这实际上是一个有趣的想法,但如果它能工作,可能需要一段时间来验证。让我来研究一下这个概念。如果您对建议的方法有更多的细节或想法(可能是示例代码),请随意。谢谢我刚刚从git下载了源代码,并按照您的建议运行了Outline项目,它看起来很不错,我必须深入研究代码,看看是否可以使用其中的一些类。非常感谢。看起来是一个非常实用的框架