2016-12-30 46 views
1

我在swift中構建iOS應用程序,並且在啓動應用程序時我想首先顯示viewController2,它位於viewController1之上,該viewController1嵌入在UINavigationController中。關鍵部分是ViewController2不是導航堆棧的一部分,而是呈現而不是被推送。從UINavigationController通過應用程序代理呈現UIViewController

這是我目前的嘗試,它不起作用,只在啓動時顯示ViewController1。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

     let mainStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let viewController1 = mainStoryboard.instantiateViewController(withIdentifier: "VC1") as! ViewController1 
     let viewController2 = mainStoryboard.instantiateViewController(withIdentifier: "VC2") as! ViewController2 
     let navController = UINavigationController(rootViewController: viewController1) 
     viewController1.present(viewController2, animated: false) 

     self.window?.rootViewController = navController 
     self.window?.makeKeyAndVisible() 

     return true 
    } 

我在這個地方的結構,因爲我使用戶能夠從左至右,從右向左滑動,去viewController2和viewController3以類似的方式來Snapchat。呈現這些控制器似乎是最好的想法,因爲他們沒有導航欄,一旦完成,你會想要返回到viewControlller1 - 也許我需要改變我的應用程序的結構,但理想情況下,不會喜歡,因爲我的目標是提交此mvp下個星期。

幫助非常感謝你的iOS和迅捷嚮導。

//認爲我需要更改應用程序的結構以在導航堆棧中包含viewController2 :(因爲使用接受的答案會導致viewController1在viewController2呈現之前短暫出現,這是合乎邏輯的 - 從長遠來看,這將是儘管短期內疼痛

+0

對於這樣的問題,我總是建議看看[這個問題](HTTPS:。。/ /stackoverflow.com/questions/19962276/best-practices-for-storyboard-login-screen-handling-clearing-of-data-upon- logou)和它的許多答案 – Honey

回答

1

rootViewController更好的應該一切之前設置做它在這個秩序,它應該工作的罰款

self.window?.rootViewController = navController   
self.window?.makeKeyAndVisible() 

navController.present(viewController2, animated: false) 
+0

謝謝@Matt - 撕裂我的頭髮出去徘徊爲什麼它不起作用,但現在一切都有意義 – Edward

+0

不客氣。 – Matt

+0

現在唯一的問題是可以在viewController2出現之前看到viewController1,在這種情況下,這並不理想 – Edward