将presentModalViewController与故事板一起使用

时间:2012-01-25 17:28:39

标签: ios objective-c authentication storyboard presentmodalviewcontroller

我对iOS编程很新,我正在开发一个iPad应用程序,它附带一个带有4个视图控制器的Tab键控制器(名为FirstViewController,SecondViewController等)。目前,标签栏控制器设置为应用程序的默认起点。我希望能够在用户到达该点之前对其进行身份验证,因此我添加了另一个名为LoginViewController的View Controller,它在Storyboard中自行浮动。

我想要做的是允许加载应用程序并在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 个答案:

答案 0 :(得分: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];

答案 1 :(得分:2)

您需要从当前显示的viewController调用“presentModalViewController”,而不是要显示的视图。可能,像这样:

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

答案 2 :(得分: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!
    })
}