2015-07-20 54 views
0

我想了解在iOS 8中的新segues。我有一個典型的登錄屏幕最初顯示的應用程序,如果用戶登錄,該屏幕應該不顯示(即使是一瞬間),用戶應該在飼料屏幕上,我從初始登錄屏幕繼續。接近另一個視圖控制器,而不顯示第一個iOS 8

但是,我無法做我想做的事。首先,我只能使用Present Modally Segue,因爲它是唯一允許刪除動畫的合適的細節。根據我試圖在視圖控制器生命週期中延續的地方,它會在最初顯示一秒鐘的登錄屏幕後繼續進行,或者根本不會繼續。

我與viewDidAppear:運氣不好,因爲它會始終在顯示初始視圖控制器後執行。

我期待到viewDidLoadviewWillAppear:但我得到這兩個(和沒有任何反應):

Warning: Attempt to present <UITabBarController: 0x12c617920> on <ViewController: 0x12c610590> whose view is not in the window hierarchy! 

我怎樣才能不顯示初始視圖控制器顯示另一個視圖控制器,甚至一秒鐘?

回答

2

我已經開發了超過50個應用程序與更多的用戶界面,我可能會喜歡。在開始時,我也是這樣做了用戶界面 - 先登錄控制器,然後執行seque,刪除登錄控制器。問題是,如果導航樹變得更加複雜,以登錄控制器作爲根開始出現嚴重問題。

UI調度

因此,我現在用的是有我最常用的視圖控制器作爲我的根(在你的情況,這將是飼料 - 但它也可以是TabBarVC,導航控制器等。 )和登錄控制器作爲模式視圖,但不以任何方式連接到該導航鏈。然後,我有Singleton來控制應用程序中的UI流程(如果你有多個故事板的更大的項目,我建議你這樣做)。單身人士做的是,在應用程序啓動時,它檢查初始條件是否應該呈現登錄表單,如果是,則從故事板抓取(使用Storyboard ID)+將其呈現爲模態(而非動畫)。通過這種方式,登錄在第一次繪製時總是可見的,但如果您不想要的話,則不需要登錄。您也不必更改導航樹/初始視圖控制器。

要想從分鏡控制器,可以使用這樣的事情:

// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- 
// MARK: - Login 

func showLoginIfNeededAnimated(animated : Bool, completion : (() -> Void)?) { 

    // Show login if user is not logged-in, for example 
    if loginShouldAppearCondition { 

     // Instantiate login VC from storyboard 
     let storyboard : UIStoryboard = UIStoryboard(name: APPLICATION_UI_STORYBOARD_NAME_IPHONE_MAIN_FLOW, bundle: NSBundle.mainBundle()) 
     let loginVC : LoginVC = storyboard.instantiateViewControllerWithIdentifier(STORYBOARD_NAME_LOGIN) as! LoginVC 

     // Present it 
     self.baseController.presentViewController(baseNC, animated: animated, completion: completion) 

     *Note - keep reference for login because of ARC! 
    } 
} 

我注意到Facebook的使用類似的東西在自己的應用程序,雖然我不能肯定他們實現(我只是在我看來,喜歡它是因爲他們如何做動畫)。說到動畫,你可以說它不會爲你提供推動動畫 - 呃,如果你願意的話,你可以隨時編寫自己的動畫,但是你也可以創造更多更漂亮的效果。這個主題上有great tutorialand also here),所以你可以檢查它學習一些有趣的東西,並可能使你的應用程序更好。

希望它可以幫助你,如果你有任何問題,請問!祝你好運:)

+0

我最終做了類似的事情。我利用了我的應用程序的初始「啓動」屏幕(iOS也用它在iOS 8上加載應用程序時顯示在屏幕上)並從那裏發送。 –

0

請理解Segue只是一個現成的開發環境,用於呈現和推動控制器,最初需要大量的代碼。塞格只是一個簡單的方法來做到這一點,而無需編寫太多的代碼來傳遞數據和設置其他控制器的屬性等。

如果segue沒有sourceViewController和destinationViewController,則segue沒有意義。因爲它有sourceViewController,所以它需要加載,因此總是會出現...如果您需要知道如何啓動您的應用程序作爲您的初始viewController特定的控制器,請看看如何設置您的應用程序rootViewController ..

但是我很肯定,如果你試圖用Segue來做,你的sourcController將會出現,至少是第二個分割。

相關問題