正确设置导航控制器作为uitab栏的根目录

时间:2015-03-22 12:31:16

标签: ios uinavigationcontroller uitabbarcontroller uitabbar

我有点困惑,不能让事情发挥作用。

所以,这是我的app Delegate中的代码。

 // If the device is an iPad, we make it taller.
    _tabBarController = [[AKTabBarController alloc] initWithTabBarHeight:(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 70 : 50];

 NSString * storyboardName = @"Main_iPhone";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
    CurrentViewController * tab1VC = [storyboard instantiateViewControllerWithIdentifier:@"Tab1"];

    // dummy controllers
    CurrentViewController * tab2VC = [storyboard instantiateViewControllerWithIdentifier:@"Tab1"];
    CurrentViewController * tab3VC = [storyboard instantiateViewControllerWithIdentifier:@"Tab1"];
    CurrentViewController * tab4VC = [storyboard instantiateViewControllerWithIdentifier:@"Tab1"];


    [_tabBarController setViewControllers:[NSMutableArray arrayWithObjects:
                                           tab1VC,
                                           tab2VC,
                                           tab3VC,
                                           tab4VC,
                                           nil]];

    [_window setRootViewController:_tabBarController];
    [_window makeKeyAndVisible];

然后,在我的故事板中,我有以下图片:

StoryBoard Image

所以,我有我的ViewController,然后点击嵌入>导航控制器

我想为每个标签设置不同的导航控制器。

在我的CurrentViewController中,单击按钮时我有这个:

- (IBAction)dummyButton:(id)sender {
    NSString * storyboardName = @"Main_iPhone";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
    UserSettingsSetupViewController *userSettingsSetupController = [storyboard instantiateViewControllerWithIdentifier:@"UserSettingsSetup"];
    [[self navigationController] pushViewController:userSettingsSetupController animated:YES];
}

显然没有任何东西被推入导航控制器,因为什么都没有打开。

进行一些研究,我发现这是因为 [self navigationController] self.navigationController返回nil。

但为什么呢?我应该添加任何代码吗?我认为通过故事板这样做,它不应该是零吗?我错了吗?

1 个答案:

答案 0 :(得分:1)

几条评论。首先,如果您正在使用故事板,请不要在应用代理中创建视图控制器;将所需的所有控制器拖到故事板中。根本不需要在应用代理中添加任何代码。

您的问题是由于尝试在应用委托中混合故事板控制器和代码而导致的。您正在实例化tab1VC并将控制器设置在第一个选项卡中 - 该控制器不会知道"有关您在故事板中添加的导航控制器的任何信息。如果你想在代码中执行它(我不推荐),你需要实例化该导航控制器(它将负责实例化其根视图控制器),并将其添加为代码中的第一个项目。 viewControllers数组。

我的建议是在故事板中做到这一切。将标签栏控制器的类更改为AKTabBarController,并在其init方法或viewDidLoad中设置其标签栏高度。