导航控制器中的标签栏控制器,如何将新的视图控制器推到tabcontroller?

devise要求:

  1. 显示用户可以从中select的项目列表
  2. 拾取物品后,用户通过后退button进入新的视图。 新视图应该包含底部没有出现在第一个屏幕中的选项卡列表
  3. 单击选项卡中的项目时,将出现一个带有后退button的新屏幕,并且标签仍应在底部可见。
  4. 单击一个选项卡应使用户将层次结构备份到#2。 不到第一个屏幕。

我尝试过以下结构:

  • UINavigationController
  • 具有UITableView UIViewController
  • 带有UITabBar UIViewController (如http://www.wiredbob.com/2009/04/iphone-tweetie-style-navigation.html )

并且

  • UINavigationController
  • 具有UITableView UIViewController
  • UITabbarController

这两种情况都可以正常显示UITabBar ,但是当我点击其中一个标签中的一个项目并推送一个新的UIViewController ,底部的标签就消失了。 我希望标签保持在UITabBarController的选项卡内发生的所有推送的UIViewControllers

一个相关的问题是这一个,但它不处理在一个标签内推视图控制器的问题: 导航控制器内的标签栏控制器,或共享导航根视图

我是否需要将根控制器更改为UITabController ? 任何人都实现了这个?

这是正确的结构:

 UITabBarcontroller (UIWindow's rootViewController) ->UINavigationController (first tab) -->UIViewController ->UINavigationController (second tab) -->UIViewController 

这听起来像你想改变你的视图层次结构的布局,以适应你的要求。 你应该像这样呈现你的视图控制器:

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] 

我没有检查上述内容,它只是从内存中写出来,但应该做你所需要的例子。

使用这种格式,您可以将任何其他视图控制器推到导航控制器堆栈上,而不会使标签栏消失。

如果要在不使用标签栏控制器作为根视图控制器的情况下推送此视图层次结构,只需按下标签栏控制器,而不是将其设置为应用程序委托中的根视图控制器。

希望有所帮助!