我正在尝试在多个表视图之间切换,作为导航控制器的根目录。根据我的应用程序的设置,我想使用不同方法的不同数据集,并且希望将这些数据封装在单独的类中。
我的想法是将视图管理器类(UIViewController)设置为导航控制器的根视图控制器。在视图管理器中,我们检查设置以查看我们要加载的视图:
if([application_mode intValue]==APPLICATION_MODE_A){
AViewController *aView = [[DeviceTableViewController alloc] init];
[self.view insertSubview:aView.view atIndex:0];
}
else if([application_mode intValue]==APPLICATION_B){
BViewController *bView = [[BViewController alloc] init];
[self.view insertSubview.bView.view atIndex:0];
}
实际上,这实际上是将相应的视图插入到视图管理器中,代价是插入视图顶部的白条和导航栏上没有信息,即子视图未连接到导航控制器。 / p>
这样做的正确方法是什么?我真的不想有一个巨大的桌面视图!
答案 0 :(得分:3)
您在哪里设置navigationController的rootViewController
?你现在不能把它设置为AviewController
的对象或BViewController
的对象吗?您可能不需要中间UIViewController
我会在开头做:
//navigationController comes from a Xib or previous code
if([application_mode intValue]==APPLICATION_MODE_A){
AViewController *aView = [[DeviceTableViewController alloc] init];
navigationController.rootViewController = aView;
[aView release];
}
else if([application_mode intValue]==APPLICATION_B){
BViewController *bView = [[BViewController alloc] init];
navigationController.rootViewController = bView;
[bView release];
}
答案 1 :(得分:1)
由于没有视图控制器包含,我喜欢Jonah William博客中概述的方法:
http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/
您无法有效地将视图控制器置于另一个视图内;相反,我们使用类似的生命周期方法(viewDidLoad,viewDidAppear等)创建一些东西,并将这些方法从父级转发给子级。这个'psudo-viewcontroller'有一个view属性,我们使用UIView addSubView
将其作为子视图添加到父视图中通过这种方法,我们可以封装视图元素,在视图控制器中动态切换它们,在一个视图控制器中放置几个等等。这样,它们可以与导航堆栈分开考虑。这是一项工作,但在我看来,iOS 4中最干净的UI封装方法。