导航控制器内的标签栏控制器,如何将新的视图控制器推送到标签控制器



设计要求:

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

我尝试了以下结构:

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

还有

  • UINavigationController
  • UIViewControllerUITableView
  • 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]

我没有检查上面的内容,它只是从内存中编写的,但应该按照您的要求作为示例。

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

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

希望对您有所帮助!

最新更新