在我的应用程序中,我有一个定义如下的菜单。菜单上的每个项目都是一个具有以下数据属性的节点:
MenuText:(为该项目显示的文本)
isView : 此项目是否为叶级项目
subMenus:如果 isView 为 false,则该属性下有多个菜单项。
因此,它是一个可以到达任何深度的树结构。菜单中的项目可以定期更改,因此实施必须保持灵活。这些数据存储在一个plist
文件中并读入NSArray
代码中(已经实现)。
我现在需要在左侧创建一个滑出菜单,该菜单将由该数据层次结构填充。我已经创建了菜单窗格并向其添加了滑动手势,所有这些都可以正常工作。菜单必须是可折叠的,单击一个菜单项会展开subViews
下面的菜单项。如果单击的项目是视图,则在屏幕的其余部分加载一个带有适当数据的新视图。
我面临的问题是UITableView
从数据中填充菜单(即 a )的逻辑NSArray
。以下是我想出的两种方法。
创建一个
UITableView
包含与菜单顶层项目一样多的部分。然后递归地遍历菜单项。对于每个不是视图的菜单项(即它具有subMenus
),创建一个新部分,其行数等于其subMenus
下的行数。当我遇到一个作为视图且没有进一步的菜单项时subMenus
,将其作为一行添加到为其上一级菜单创建的子部分中。创建一个菜单,其中包含一个部分和与顶层菜单项的数量一样多的行。单击菜单项时,在其下方插入行以表示其子菜单。单击同一级别的另一个菜单项时,通过删除插入的行来折叠先前展开的菜单。单击没有子菜单的菜单项时,屏幕的其余部分将填充数据。
我已经尝试了这两种方法,但无法超越最初的步骤。对于第一种方法,我知道我需要添加 aUITableView
作为 的一部分UITableViewCells
,这很好,但我需要递归地这样做。对于第二种方法,我需要知道indexPath
单击的每个项目的哪个可以进入多个级别。
我想在这里得到一些关于我应该采取哪种方法的建议,以及一些关于如何去做的指导。另外,如果有任何更好的方法可以做到这一点,请提出建议。谢谢。