如何根据XML生成动态UITableView?

时间:2012-12-20 23:40:01

标签: ios uitableview uitabbarcontroller

我正在尝试根据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。

1 个答案:

答案 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编程指南”。