我的iOS应用程序需要用户身份验证,当用户未经过身份验证时,应用程序应显示一个用户可以登录的ViewController。此屏幕还为用户提供了创建帐户的选项,因此整个登录屏幕(和可选的注册屏幕)都是使用以编程方式显示的UINavigationController设置的。
将显示登录屏幕,其中包含以下代码:
- (void)promptCredentials{
dispatch_async(dispatch_get_main_queue(), ^{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *loginScreenNav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
[loginScreenNav setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:loginScreenNav animated:YES];
});
}
但是,调用此方法时,应用会导航到黑屏。以编程方式向用户显示不同ViewController的正确方法是什么?我发现了几个与这种黑屏相关的SO问题,然而,没有一个答案对我有用。我的应用程序在iOS 8.2上运行。
答案 0 :(得分:1)
您需要创建一个UIViewcontroller并将其设置为UINAvigationController的rootController。
presentModalViewController从ios6开始不推荐使用,请尝试使用presentViewController。
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
UINavigationController *loginScreenNav = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentViewController:loginScreenNav animated:YES];