使用storyboards和presentModalViewController

8
我是一名新手iOS程序员,正在开发一个iPad应用程序。该应用程序具有带有4个视图控制器的标签栏控制器(分别命名为FirstViewController、SecondViewController等)。目前,标签栏控制器设置为应用程序的默认起始点。我希望能够在用户到达此点之前对其进行身份验证,因此我在故事板中添加了另一个名为LoginViewController的视图控制器,它独立浮动。
我的想法是允许应用程序加载,在didFinishLaunching中显示登录页面,直到完成身份验证,然后将其关闭。我已经搜索了过去几天,但我尝试的所有方法都失败了。
我最近的尝试是:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];

UINavigationController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"];

loginVC.modalPresentationStyle = UIModalPresentationFullScreen;

[self.window.rootViewController presentModalViewController:loginVC animated:YES];

非常感谢您的帮助。代码可以编译和运行,但视图根本没有显示出来,我真的很困惑为什么会发生这种情况。

3个回答

12
问题在于我试图将其实例化为UINavigationController,而实际上它只是一个UIViewController。在appDelegate.m的applicationDidBecomeActive中调用它就可以解决问题了。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"];
loginVC.modalPresentationStyle = UIModalPresentationFullScreen;    
[self.window.rootViewController presentModalViewController:loginVC animated:YES];

2
您需要从当前显示的视图控制器中调用“presentModalViewController”,而不是要显示的视图。可能会像这样:
[self.window.rootViewController presentModalViewController:loginVC animated:YES];

2
在Swift 2中,现在是这样的:
if let loginController: LoginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("StoryboardControllerID")  as? LoginViewController {
    loginController.modalPresentationStyle = .FullScreen
    self.window?.rootViewController?.presentViewController(loginController, animated: true, completion: { () -> Void in
        // do stuff!
    })
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接