8

我对iOS编程还很陌生,我正在开发一个iPad应用程序,该应用程序具有一个带有4个视图控制器(名为FirstViewController,SecondViewController等)的选项卡栏控制器。目前选项卡栏控制器被设置为应用的默认起点。我希望能够在用户到达该点之前对其进行身份验证,因此我添加了另一个称为LoginViewController的视图控制器,该视图控制器在故事板中自身处于浮动状态。使用presentModalViewController与故事板

我想要做的是允许应用程序加载并在didFinishLaunching中显示登录页面,直到认证完成,然后解除它。过去几天我一直在寻找,但我一直在尝试的一切都失败了。

我最新的尝试是

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 

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

loginVC.modalPresentationStyle = UIModalPresentationFullScreen; 

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

任何帮助,将不胜感激。它编译并运行,但是这个视图并没有显示出来,我真的很困惑,为什么会发生这种情况。

回答

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

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

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

在夫特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! 
    }) 
}