ios - 如何在 iOS 中创建分层菜单?
<p><p>在我的应用程序中,我有一个定义如下的菜单。菜单上的每一项都是一个具有以下数据属性的节点:</p>
<p><strong>MenuText</strong> :(为该项目显示的文本)</p>
<p><strong>isView</strong> : 该项目是否为叶级项目</p>
<p><strong>subMenus</strong>:如果isView为false,则该属性下有多个菜单项。</p>
<p>因此,它是一个可以到达任何深度的树结构。菜单中的项目可以定期更改,因此实现必须保持灵活。此数据存储在 <code>plist</code> 文件中,并读入代码中的 <code>NSArray</code>(已实现)。</p>
<p>我现在需要在左侧创建一个滑出式菜单,该菜单将由该数据层次结构填充。我已经创建了菜单 Pane 并向其添加了滑动手势,所有这些都可以正常工作。菜单必须是可折叠的,单击一个菜单项会展开其下方的 <code>subViews</code>。如果单击的项目是 View ,则在屏幕的其余部分加载一个带有适当数据的新 View 。 </p>
<p>我面临的问题是从 <code>NSArray</code> 数据填充菜单(这是一个 <code>UITableView</code>)的逻辑。以下是我想出的两种方法。</p>
<ol>
<li><p>创建一个 <code>UITableView</code>,其中包含与菜单顶层项目一样多的部分。然后递归地遍历菜单项。对于每个不是 View 的菜单项(即它具有 <code>subMenus</code>),创建一个新部分,其行数等于其下 <code>subMenus</code> 的数量。当我遇到一个作为 View 且没有其他 <code>subMenus</code> 的菜单项时,将其作为一行添加到为其上一级菜单创建的子部分中。</p></li>
<li><p>创建一个菜单,其中包含一个部分和与顶层菜单项的数量一样多的行。单击菜单项时,在其下方插入行以表示其子菜单。单击同一级别的另一个菜单项时,通过删除插入的行来折叠先前展开的菜单。单击没有子菜单的菜单项时,屏幕的其余部分将填充数据。 </p></li>
</ol>
<p>我已经尝试了这两种方法,但无法超越最初的步骤。对于第一种方法,我知道我需要添加一个 <code>UITableView</code> 作为 <code>UITableViewCells</code> 的一部分,这很好,但我需要递归地这样做。对于第二种方法,我需要知道每个单击的项目的 <code>indexPath</code> 可以进入多个级别。</p>
<p>我想在这里获得一些关于我应该采用哪种方法的建议以及有关如何进行的一些指导。另外,如果有任何更好的方法可以做到这一点,请提出建议。谢谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>在我看来,使用 UINavigationController 是最简单的方法。您可以根据需要推送任意数量的 UITableView。
如果它不符合您的设计要求,您可以尝试可扩展的 UITableViews。开源的很少:</p>
<ol>
<li> <a href="https://github.com/jackkwok/JKExpandTableView" rel="noreferrer noopener nofollow">JKExpandTableView</a> </li>
<li> <a href="https://github.com/serverdensity/ios-SDNestedTable" rel="noreferrer noopener nofollow">SDNestedTable</a> </li>
<li> <a href="https://github.com/TheAKDev/iOS-Tree-Component" rel="noreferrer noopener nofollow">iOS-Tree-Component</a> </li>
</ol></p>
<p style="font-size: 20px;">关于ios - 如何在 iOS 中创建分层菜单?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/18711652/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/18711652/
</a>
</p>
页:
[1]