如何使用多级可扩展可折叠行创建UITableView?

时间:2013-05-28 03:32:22

标签: 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

依旧......

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

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

有什么想法吗?我已经看到了可扩展行的项目示例,但我仍然感到困惑。

帮助!

2 个答案:

答案 0 :(得分:3)

GitHub上的TLIndexPathTools库非常适合这类事情。为了演示,我整理了一个simple collapsible tree viewer component。它使用每个级别的单元格支持任何树深度。尝试运行"Outline" sample project

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

答案 1 :(得分:0)

我认为嵌套词典对– tableView:cellForRowAtIndexPath:不方便。

这是一个懒惰的解决方案:

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

然后是动画:– insertRowsAtIndexPaths:withRowAnimation:– deleteRowsAtIndexPaths:withRowAnimation:UITableViewRowAnimationTopUITableViewRowAnimationFade看起来不错。