我想构建一个应用程序来导航数据层次结构。此层次结构的结构类似于我在下图中显示的结构。结构的一个分支可以比其他分支更多。
我想用TableViews深入研究这个结构:
A > AA > AAB > AABA
或
A > AB > ABA
我想知道的是,如果我的故事板中只有一个TableViewController并重复使用它来显示每个新的数据级别?
我不想在我的故事板中将一堆tableviewcontrollers
链接在一起,因为我不确定我是否会有3级,4级或100级的层次结构。
答案 0 :(得分:7)
要仅使用故事板中绘制的单个VC递归到任意深度,请使用故事板绘制顶层:导航控制器,其上有一个表视图控制器。表vc应该是UITableView子类,并且在storyboard中有一个storyboard标识符(例如," MyCustomTableVC")。
为MyCustomTableVC提供一个公共属性(比如,ModelItem *节点),指示模型中应该显示哪个节点。
当表格vc获得didSelectRowAtIndexPath
时,取代故事板segues,让它创建自己的另一个实例......
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];
此方法具有获取所有导航控制器行为的好处:动画推送和弹出,后退按钮等。
答案 1 :(得分:1)
当然,您可以重复使用UITableView
。 UITableView
有2个基本部分,UITableViewDelegate
和UITableViewDataSource
。
UITableViewDelegate
控制了很多表格交互和一些显示特征(heightForRowAtIndexPath
等)。选择行时会发生什么。你甚至可以选择一行吗?
UITableViewDataSource
是数据的良好来源。该表有多少个部分?每个部分有多少行?第X部分第Y行的单元格内容是什么?
例如,您可以为层次结构中的每个表使用相同的UITableView
和UITableViewDelegate
,但更改UITableViewDataSource
。如果要更改数据源,可以执行类似......
if (isSingingBand) {
self.tableview.dataSource = [TableABBADataSource alloc] init];
} else {
self.tableview.dataSource = [TableAABDataSource alloc] init];
}
[self.tableview reloadData];
Apple's programming guide on Table Views应该回答很多可能会遇到的问题。