设计要求:
我尝试过以下结构:
UINavigationController
UIViewController
UITableView
UIViewController
UITabBar
(例如此处http://www.wiredbob.com/2009/04/iphone-tweetie-style-navigation.html)以及
UINavigationController
UIViewController
UITableView
UITabbarController
这两种情况都能正常显示UITabBar
,但当我点击其中一个标签中的某个项目并推送新的UIViewController
时,底部的标签就会消失。我希望标签保留在UIViewControllers
标签内发生的所有推送UITabBarController
的位置。
一个相关的问题是这个,但它没有处理选项卡内推送的viewcontrollers的问题: Tab bar controller inside a navigation controller, or sharing a navigation root view
我是否需要将root控制器更改为UITabController
?有人实际实现了吗?
答案 0 :(得分:3)
这是正确的结构:
UITabBarcontroller (UIWindow's rootViewController)
->UINavigationController (first tab)
-->UIViewController
->UINavigationController (second tab)
-->UIViewController
答案 1 :(得分:3)
听起来您想要更改视图层次结构的布局以满足您的要求。您应该以这样的方式呈现视图控制器:
UITabBarController - > UINavigationController - >的UIViewController
在您的应用委托中,您可以使用以下内容以编程方式实现此目的:
UIViewController *viewControllerOne = [[[UIViewController alloc] init] autorelease];
UINavigationController *navigationControllerOne = [[[UINavigationController alloc] initWithRootViewController:viewControllerOne] autorelease];
UIViewController *viewControllerTwo = [[[UIViewController alloc] init] autorelease];
UINavigationController *navigationControllerTwo = [[[UINavigationController alloc] initWithRootViewController:viewControllerTwo] autorelease];
UITabBarController *tabBarController = [[[UITabBarController alloc] init] autorelease];
[tabBarController setViewControllers:[NSArray arrayWithObjects:navigationControllerOne, navigationControllerTwo, nil]];
[[self window] setRootViewController:tabBarController]
我没有检查上面的内容,它只是从内存中写的,但应该做你需要做的例子。
使用此格式,您可以将任何其他视图控制器推送到导航控制器堆栈,而不会使标签栏消失。
如果要在不使用标签栏控制器作为根视图控制器的情况下推送此视图层次结构,只需按下标签栏控制器,而不是将其设置为应用程序委托中的根视图控制器。
希望有所帮助!