【问题标题】:properly set up navigation controller as a root for a uitab bar将导航控制器正确设置为 uitab 栏的根
【发布时间】:2015-03-22 12:31:16
【问题描述】:

我有点困惑,无法让事情正常进行。

所以,这是我的应用程序委托中的代码。

 // 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];

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

所以,我有我的 ViewController,然后我点击了 Embed In > Navigation Controller

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

在我的 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。

但这是为什么呢?我应该添加任何代码吗?我认为通过从情节提要中执行此操作,它不应该为零?我错了吗?

【问题讨论】:

    标签: ios uinavigationcontroller uitabbarcontroller uitabbar


    【解决方案1】:

    几个厘米。首先,如果您使用的是故事板,请不要在应用程序委托中创建视图控制器;将您需要的所有控制器拖到情节提要中。根本不需要在应用委托中添加任何代码。

    您的问题是由于尝试在应用程序委托中混合故事板控制器和代码而引起的。您正在实例化 tab1VC 并使其成为第一个选项卡中的控制器——该控制器对您在情节提要中添加的导航控制器一无所知。如果您想在代码中执行此操作(我不推荐),则需要实例化该导航控制器(它将负责实例化其根视图控制器),并将其添加为 viewControllers 数组中的第一项.

    我的建议是在故事板中完成所有操作。将那里的标签栏控制器的类更改为 AKTabBarController,并在其 init 方法或 viewDidLoad 中设置其标签栏高度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2015-11-07
      • 2018-10-25
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      相关资源
      最近更新 更多