【问题标题】:Setting First view controller in App Delegate在 App Delegate 中设置第一个视图控制器
【发布时间】:2014-02-08 20:47:01
【问题描述】:

我正在开发一个 iOS 应用程序并使用故事板。在我的故事板中,我设置了一个视图控制器作为初始视图控制器。一切正常。

现在我必须在应用程序委托中编写一些登录来决定在开始时显示哪个视图控制器,因为这取决于用户在登录过程中的距离。

所以,我从我的故事板中删除了初始视图控制器标记,并从我的 plist 文件中删除了故事板设置。

现在,在应用委托中我有这段代码 -

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
UIViewController *initialViewController = [storyboard instantiateViewControllerWithIdentifier:[XYZUtils getStartScreenViewController]];
XYZStartScreenViewController *startScreenViewController = (XYZStartScreenViewController *)initialViewController;

[self.window addSubview:startScreenViewController.view];
[self.window setRootViewController:startScreenViewController];

[self.window setBackgroundColor:[UIColor whiteColor]];
[self.window makeKeyAndVisible];

这不显示视图控制器 - 我只是得到一个黑屏并且没有错误消息。在使用断点遍历上述代码时,没有错误。视图控制器正在被实例化,但它没有被显示。

我错过了什么吗?

【问题讨论】:

  • 请勿拨打[self.window addSubview:startScreenViewController.view];
  • @rmaddy 是的,我也试过了,但同样的问题
  • 我没有说它会解决问题。 :) 但是设置根视图控制器就足够了。不要也将其添加为子视图。
  • 明白。我相信self.windownil,因此是问题所在。如果不使用情节提要,则self.window 不会自动实例化。必须手动创建一个主UIWindow。不过,不知道该怎么做!

标签: ios iphone objective-c


【解决方案1】:

阅读这篇文章.. 最好创建一个空视图控制器并将其标记为初始视图控制器 并在该视图控制器的 viewDidLoad 方法中执行所有登录过程。

Linking a new viewcontroller to Storyboard?

【讨论】:

    【解决方案2】:

    由于某种原因,当您在情节提要中取消选择初始视图控制器设置时,您的应用将不会在 didFinishLaunching 中获得 UIWindow 设置。

    所以,你应该在那里实例化你自己的窗口;只需将其添加到 application didFinishLaunchingWithOptions 方法的开头即可:

    UIWindow* window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    

    我认为这个解决方案非常好,但是因为您使用的是故事板,所以一个“更干净”的解决方案是使用某种“LoginManagerViewController”作为您的初始视图控制器,负责根据距离处理下一步该做什么用户正在登录过程中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 2023-03-17
      • 2012-10-30
      • 2012-10-28
      相关资源
      最近更新 更多