【问题标题】:Programmatically changing the root controller of an UINavigationController以编程方式更改 UINavigationController 的根控制器
【发布时间】:2015-02-08 21:41:58
【问题描述】:

我正在使用情节提要,并将UITabBarController 设置为根控制器。我在标签栏中有 3 个标签项,对于第一个,我有一个 UINavigationController。我希望动态设置此导航控制器的根视图控制器:根据用户提供的参数,我有两个候选视图控制器。

我正在尝试在AppDelegate 中这样做:

UIStoryboard *storyboard = self.window.rootViewController.storyboard;
if (condition1) {
    UINavigationController *navViewController = [storyboard instantiateViewControllerWithIdentifier:@"navController"];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"homeController1"];
    [navViewController setViewControllers:@[viewController]];

} else if (condition2) {
    UINavigationController *navViewController = [storyboard instantiateViewControllerWithIdentifier:@"navController"];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"homeController2"];
    [navViewController setViewControllers:@[viewController]];

但它不起作用。在情节提要中,homeController1 norhomeController2 也没有任何转场。我怎么能这样做?

谢谢

【问题讨论】:

  • 当您说“它不起作用”时,发生的事情与您的预期不同?您是否验证了所有变量都不为零?
  • @oltman 这意味着没有加载视图控制器......是的,我已经检查过当我从情节提要实例化时得到非零引用

标签: ios uiviewcontroller uinavigationcontroller storyboard


【解决方案1】:

如果我对您的理解正确,您正在尝试根据条件启动不同的视图控制器。您可以在您的应用委托中尝试此操作。

UIStoryboard *storyboard =
  [UIStoryboard storyboardWithName:@"Main" bundle:nil];

if (yourCondition) {
    UIViewController *viewController =
    [storyboard instantiateViewControllerWithIdentifier:@"tutorialView"];
    self.window.rootViewController = viewController;
} else {
    UIViewController *viewController = [storyboard
        instantiateViewControllerWithIdentifier:@"mainViewController"];
    self.window.rootViewController = viewController;
}

【讨论】:

  • 这或多或少是我想要做的,除了条件视图控制器不是window.rootViewController...但没有使用我的代码加载视图控制器发布...
猜你喜欢
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2021-05-18
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多