【问题标题】:ios change storyboard default view controller at run timeios在运行时更改故事板默认视图控制器
【发布时间】:2012-05-15 23:04:38
【问题描述】:

是否可以覆盖故事板中的默认视图控制器以显示不同的控制器?当然,这一切都会发生在 AppDelegate 中。

【问题讨论】:

  • 默认 ViewController 在最新 SDK 的 info.pList 中声明。是否应该在启动时检查某些内容,然后决定推送哪个视图控制器?
  • @Martol1ni 是的,你说的正是我想要的。
  • 你在使用 UINavigationController 吗?
  • 不,只有UIViewControllers。我有两个,一个是默认的。在myBool == YES,我想用我的第二个控制器而不是默认控制器打开应用程序。

标签: ios uiviewcontroller storyboard


【解决方案1】:

@Martol1ni 我想使用你的答案,但我也想远离不必要的故事板混乱,所以我稍微调整了你的代码。不过,我确实为您的鼓舞人心的回答给了您一个 +1。

我将以下所有内容放在默认控制器上。

- (void)gotoScreen:(NSString *)theScreen
{
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:theScreen];
    [app.window setRootViewController:screen];
}

然后在发生逻辑的地方我会根据需要调用以下代码。

if(myBool == YES) {
    [self gotoScreen:@"theIdentifier"];
}

【讨论】:

    【解决方案2】:

    我肯定会在 UINavigationController 中嵌入一个 rootView,所以你没有两个,而是三个视图。一个永远不会启动,只是控制所有其他的。然后像这样实现其中的方法:

    - (void) decideViewController  {
        NSString * result;
        if (myBool) {
            result = @"yourIdentifier";
        }
        else {
            result = @"yourOtherIdentifier";
        }
        self.navigationController.navigationBarHidden = YES; // Assuming you don't want a navigationbar
        UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:@"view1ident"];
        [self.navigationController pushViewController:screen animated:NO]; // so it looks like it's the first view to get loaded
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [self decideViewController];
    }
    

    看起来从来没有加载过第一个视图。如果您使用的是 NIBS,您可以从 AppDelegate 执行所有操作...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2013-11-19
      • 2016-09-12
      • 2012-09-17
      相关资源
      最近更新 更多