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! 
    }) 
}