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

时间:2012-03-30 02:14:50

标签: objective-c ios cocoa-touch uinavigationcontroller uitabbarcontroller

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

- (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];
}

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

- (void)launchNewViewControllerWithArray:(NSArray *)stuff
{
    self.newViewController = [self getNewViewController];

    [[self.tabbarController selectedViewController] pushViewController:self.newViewController animated:YES];
}