如何将其他视图控制器推送到NavigationController但保留TabBar?

我的应用程序以导航控制器根目录下的基本视图控制器开头

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.navController.viewControllers = [NSArray arrayWithObject:[self getHomeViewController]]; [[self getWindow] addSubview:self.navController.view]; [[self getWindow] makeKeyAndVisible]; return YES; } 

选择导航项后,我推一个带有几个视图控制器的标签栏控制器。

 -(void)launchOptionWithTabBarController:(NSUInteger)selectedIndex { self.tabBarController.viewControllers = [NSArray arrayWithObjects: [self getFirstViewController], [self getSecondViewController], nil]; [self.tabBarController setSelectedIndex:selectedIndex]; [self.navController pushViewController:self.tabBarController animated:YES]; } 

问题是我现在需要在标签栏控制器中打开一个视图控制器的顶部添加另一个视图控制器…当我按下这样一个导航控制器时…

 - (void)launchNewViewControllerWithArray:(NSArray *)stuff { self.newViewController = [self getNewViewController]; [self.navController pushViewController:self.newViewController animated:YES]; } 

我不再看到标签栏导航(我更愿意看到这个导航带/我推送的每个项目)。

如何修改我的控制流程以使标签栏导航项保持在底部?

您需要在选项卡控制器中为导航控制器设置父级,而不是相反。 或者在tabbar控制器上引入另一个导航控制器,并将新的viewcontroller推送到该控制器上。

您可以通过在tabbar选择的viewcontroller上推送新的viewController来实现此目的。 所以你可以像这样写你的启动function

 - (void)launchNewViewControllerWithArray:(NSArray *)stuff { self.newViewController = [self getNewViewController]; [[self.tabbarController selectedViewController] pushViewController:self.newViewController animated:YES]; }