10

我想构建一个应用程序来导航数据层次结构。此层次结构的结构类似于我在下图中显示的结构。结构的一个分支可能比其他分支具有更多级别。

在此处输入图像描述

我想用这样的 TableViews 深入研究这个结构:

    A > AA > AAB > AABA

或者

    A > AB > ABA

我想知道的是,我的情节提要中是否只能有一个 TableViewController 并重用它来显示每个新级别的数据?我不想tableviewcontrollers在我的故事板中有一堆链接在一起,因为我不确定我是否会有 3、4 或 100 个级别的层次结构。

4

2 回答 2

7

要在 storyboard 中仅绘制一个 VC 递归到任意深度,请使用 storyboard 绘制顶层:一个导航​​控制器,其根部有一个表视图控制器。表 vc 应该是 UITableView 子类,并且在情节提要中具有情节提要标识符(例如“MyCustomTableVC”)。

给 MyCustomTableVC 一个公共属性(例如,ModelItem *node),它指示它应该在模型中显示哪个节点。

当表 vc 获取时,而不是故事板 segues,didSelectRowAtIndexPath让它创建另一个自身的实例......

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];
// Imagine it's called MyCustomTableVC
MyCustomTableVC *newVC = (MyCustomTableVC*)[mainStoryboard 
                    instantiateViewControllerWithIdentifier: @"MyCustomTableVC"];

将 newVC 模型节点设置为所选项目(模型中 indexPath.row 中的项目),然后推送到它...

// making up a lot of stuff about your model here, but hopefully you get the idea...
newVC.node = [self.model objectAtIndex:indexPath.row];
[self.navigationController pushViewController:newVC animated:YES];

这种方法具有获得所有导航控制器行为的好处:动画推送和弹出、后退按钮等。

于 2013-02-27T15:57:34.963 回答
1

当然,您可以重复使用UITableView. TheUITableView有 2 个基本部分,theUITableViewDelegateUITableViewDataSource.

UITableViewDelegate控制很多表格交互和一些显示特性(heightForRowAtIndexPath等等)。当您选择一行时会发生什么。你甚至可以选择一行吗?

UITableViewDataSource是井,数据的来源。表有几个部分?每个部分有多少行?第 X 节第 Y 行的单元格的内容是什么?

例如,您可以对层次结构中的每个表使用相同的UITableView和,但更改. 当您想更改数据源时,您可能会执行类似...UITableViewDelegateUITableViewDataSource

if (isSingingBand) {
    self.tableview.dataSource = [TableABBADataSource alloc] init];
} else {
    self.tableview.dataSource = [TableAABDataSource alloc] init];
}
[self.tableview reloadData];

Apple 的 Table Views 编程指南应该回答您可能遇到的很多问题。

于 2013-02-27T15:30:54.240 回答