我读到在iOS应用程序中有这样的结构是不好的。但是,如果应用程序有很多UINavigationController
和UITabBarController
s,该怎么办?但是只显示一个UINavigationBar
和一个UITabBar
?隐藏了其他UINavigationBar
和UITabBar
。
EDITED
例如,在基于导航的应用程序中,我调用此代码:
- (IBAction)openTabsController:(id)sender {
tabOneController *tabOneViewContr = [[[tabOneController alloc] initWithNibName:@"tabOneController" bundle:nil] autorelease];
UINavigationController *tabOneNavContr = [[UINavigationController alloc] initWithRootViewController:tabOneViewContr];
tabTwoController *tabTwoViewContr = [[[tabTwoController alloc] initWithNibName:@"tabTwoController" bundle:nil] autorelease];
UINavigationController *tabTwoNavContr = [[UINavigationController alloc] initWithRootViewController:tabTwoViewContr];
UITabBarController *tabContr = [[[UITabBarController alloc] init] autorelease];
tabContr.viewControllers = [NSArray arrayWithObjects:tabOneNavContr,tabTwoNavContr, nil];
sel.navigationController.navigationBar.hidden = YES;
[self.navigationController pushViewController:tabContr animated:YES];
}
调用此方法后,我有两个UINavigationController
和一个UITabBarController
。同时,我在屏幕上有一个UINavigationBar
和一个UITabBar
。
EDITED
近似方案。
从一开始我们就有了一个UINavigationController,它允许在视图(圆圈)之间导航。然后在推出UITabBar后,允许在视图之间切换。具有两个小rects的矩形是具有2个UITabBarItem的UITabBar的视图。当我们按下任何UITabBarItem时,会出现另一个UIView。在这个UIView中,我们可以按下一个按钮,该按钮用另一个UITabBar调用另一个视图。如果没有用另一个UITabBar隐藏,当前UITabBar在推送后是可见的。 现在更清楚了吗? 上面的代码几乎完美(除了一些动画,不包括Apple的限制)
答案 0 :(得分:1)
Gargo,
我不确定我理解你的问题,但苹果文档很清楚。如果您使用- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
,则表示viewController
:
不能是标签栏控制器的实例,它必须不是 在导航堆栈上。
既然你做了
[self.navigationController pushViewController:tabContr animated:YES];
您正在推送导航堆栈中的标签栏控制器实例。
如果您添加了您可能实现的结构,我可以帮助您找到另一种解决方案。
希望有所帮助。
答案 1 :(得分:1)
应用程序在任何时候都应该只有一个工作的tabBarController。
tabBarController也应该是根视图控制器。总是。 (如果在tabBarController之前需要登录视图或类似内容,则删除登录视图,创建tabBarController,然后将其设为根目录。)
这是苹果公司工程师亲自向我提出的建议。
请记住,应用程序应该是快速且易于使用/导航的小型应用程序。如果您觉得需要多个tabBarController,那么从UI / Usability的角度来看,您的应用程序设计可能非常错误。