在App Delegate中设置第一个视图控制器

时间:2014-01-19 19:01:27

标签: ios iphone objective-c

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

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

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

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

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

这不显示视图控制器 - 我只是得到黑屏并且没有错误消息。在使用断点来浏览上面的代码时,没有错误。视图控制器正在实例化,但未显示。

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

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

Linking a new viewcontroller to Storyboard?

答案 1 :(得分:0)

出于某种原因,当你取消选择故事板中的初始视图控制器设置时,你的应用程序将无法在didFinishLaunching中获得UIWindow设置。

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

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

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