导航控制器内的标签栏控制器,如何将新的viewcontrollers推送到tabcontroller?

时间:2012-06-21 10:34:58

标签: ios uitabbarcontroller uitabbar

设计要求:

  1. 显示用户可以从中选择的项目列表
  2. 选择项目后,使用后退按钮将用户带到新视图。新视图应包含底部的选项卡列表,这些选项卡在第一个屏幕中不存在
  3. 单击选项卡中的项目时,应显示一个带有后退按钮的新屏幕,并且仍应在底部显示选项卡。
  4. 单击选项卡应该让用户将层次结构备份到#2。不到第一个屏幕。
  5. 我尝试过以下结构:

    以及

    • UINavigationController
    • UIViewController UITableView
    • UITabbarController

    这两种情况都能正常显示UITabBar,但当我点击其中一个标签中的某个项目并推送新的UIViewController时,底部的标签就会消失。我希望标签保留在UIViewControllers标签内发生的所有推送UITabBarController的位置。

    一个相关的问题是这个,但它没有处理选项卡内推送的viewcontrollers的问题: Tab bar controller inside a navigation controller, or sharing a navigation root view

    我是否需要将root控制器更改为UITabController?有人实际实现了吗?

2 个答案:

答案 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]

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

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

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

希望有所帮助!