我正在尝试根据XML文件在我的iPad应用中创建一个菜单栏。我决定使用动态UITableView来实现它。
XML文件是这样的:
<?xml version="1.0" encoding="UTF-8" ?>
<menuBar>
<menu id="1" text="File">
<menuItem id="11" text="New Panel" />
<menuItem id="12" text="Open" />
</menu>
<menu id="2" text="Edit">
<menuItem id="21" text="Size" />
<menuItem id="22" text="Font" />
<menu id="3" text="Option">
<menuItem id="31" text="XX" />
</menu>
</menu>
</menuBar>
因此菜单栏可能有多个级别。菜单可能包含其他菜单以及一些菜单项,例如menu id="2"
有menu id="3"
,menu id="3"
有自己的menuItem
。
我知道如何动态创建UITableViewCell
。问题是当单元格是menu
时,我不知道如何创建下一级别,以及如何在更深层UITableView
创建单元格。
如果你知道如何实现这一点,请帮助我。或者,如果有更好的方法来生成菜单而不是使用UITableView
,请告诉我们。干杯:)
========== UPDATE ===========
我只接收过一次XML,所以在解析XML时可以创建这些tableview吗?我以后不需要再创建它们。
例如,当有menu
个元素时,我会将cell
添加到当前级别的tableview
,并创建一个new tableview
作为下一个级别,现在当有menuItem
元素,我向此new tableview
添加了一个新单元格。当前菜单元素中没有其他元素时,返回上一级tableview。
答案 0 :(得分:0)
在表视图委托(通常是UITableViewController
的子类)中,实现tableView:didSelectRowAtIndexPath:
以响应用户点击单元格。然后,实现需要1)创建另一个UITableViewController
的新实例,该实例将管理菜单层次结构的下一级; 2)将新控制器推送到UINavigationController
的导航堆栈。
这可能是一个非常粗略的草案:
- (void) tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:NO];
YourTableViewController* aController = [[YourTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
[self.navigationController pushViewController:aController animated:YES];
[aController release];
}
此代码示例假定您正在编写代码的控制器位于导航控制器的堆栈中(self.navigationController
)。
在任何情况下,您都应该仔细查看Apple的课程UINavigationController
的文档,以及他们的“适用于iOS的View Controller编程指南”。