0

设计要求:

  1. 显示用户可以选择的项目列表
  2. 选择一个项目后,使用后退按钮将用户带到一个新视图。新视图应在底部包含第一个屏幕中不存在的选项卡列表
  3. 单击选项卡中的项目时,应出现一个带有后退按钮的新屏幕,并且选项卡仍应在底部可见。
  4. 单击选项卡应使用户将层次结构备份到#2。不是第一个屏幕。

我尝试了以下结构:

并且

  • UINavigationController
  • UIViewControllerUITableView
  • UITabbarController

这两种情况都可以很好地显示UITabBar,但是当我单击其中一个选项卡中的一个项目并推送一个新UIViewController的 时,底部的选项卡就会消失。我希望标签保留UIViewControllersUITabBarController.

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

我是否需要将 rootcontroller 更改为UITabController? 有人真正实现了这个吗?

4

2 回答 2

3

这是正确的结构:

UITabBarcontroller (UIWindow's rootViewController)
->UINavigationController (first tab)
-->UIViewController
->UINavigationController (second tab)
-->UIViewController
于 2012-06-21T10:39:04.013 回答
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]

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

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

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

希望有帮助!

于 2012-06-21T10:43:50.220 回答