2

在我的应用程序中,我有一个定义如下的菜单。菜单上的每个项目都是一个具有以下数据属性的节点:

MenuText:(为该项目显示的文本)

isView : 此项目是否为叶级项目

subMenus:如果 isView 为 false,则该属性下有多个菜单项。

因此,它是一个可以到达任何深度的树结构。菜单中的项目可以定期更改,因此实施必须保持灵活。这些数据存储在一个plist文件中并读入NSArray代码中(已经实现)。

我现在需要在左侧创建一个滑出菜单,该菜单将由该数据层次结构填充。我已经创建了菜单窗格并向其添加了滑动手势,所有这些都可以正常工作。菜单必须是可折叠的,单击一个菜单项会展开subViews下面的菜单项。如果单击的项目是视图,则在屏幕的其余部分加载一个带有适当数据的新视图。

我面临的问题是UITableView从数据中填充菜单(即 a )的逻辑NSArray。以下是我想出的两种方法。

  1. 创建一个UITableView包含与菜单顶层项目一样多的部分。然后递归地遍历菜单项。对于每个不是视图的菜单项(即它具有subMenus),创建一个新部分,其行数等于其subMenus下的行数。当我遇到一个作为视图且没有进一步的菜单项时subMenus,将其作为一行添加到为其上一级菜单创建的子部分中。

  2. 创建一个菜单,其中包含一个部分和与顶层菜单项的数量一样多的行。单击菜单项时,在其下方插入行以表示其子菜单。单击同一级别的另一个菜单项时,通过删除插入的行来折叠先前展开的菜单。单击没有子菜单的菜单项时,屏幕的其余部分将填充数据。

我已经尝试了这两种方法,但无法超越最初的步骤。对于第一种方法,我知道我需要添加 aUITableView作为 的一部分UITableViewCells,这很好,但我需要递归地这样做。对于第二种方法,我需要知道indexPath单击的每个项目的哪个可以进入多个级别。

我想在这里得到一些关于我应该采取哪种方法的建议,以及一些关于如何去做的指导。另外,如果有任何更好的方法可以做到这一点,请提出建议。谢谢。

4

3 回答 3

3

在我看来,使用 UINavigationController 是最简单的方法。您可以根据需要推送任意数量的 UITableView。如果它不符合您的设计要求,您可以尝试可扩展的 UITableViews。很少有开源:

  1. JKExpandTableView
  2. 嵌套表
  3. iOS 树组件
于 2013-09-10T06:58:43.863 回答
1

感谢您的回复。我最终使用以下控件执行此操作:

iOS 版手风琴

它很好地达到了我的目的,我把它贴在这里,以便有相同要求的人可以找到它。

于 2013-10-12T14:12:26.980 回答
0

看看TLIndexPathTools。它有一个“树”扩展可以做到这一点。尝试运行Outline 示例项目。调整示例项目的主要任务是编写一个递归函数,将节点数组转换为TLIndexPathTreeItem对象数组。该方法中的所有代码controller:willChangeNode:都是延迟加载的示例,听起来您不需要任何代码。

于 2013-09-10T06:49:49.037 回答