2016-12-30 4 views
1

Ich baue eine iOS App in swift und nach dem Start der App möchte ich zuerst viewController2 zeigen, welches über viewController1 präsentiert wird, welches in einen UINavigationController eingebettet ist. Der entscheidende Teil ist, dass ViewController2 nicht Teil des Navigations-Stacks ist und präsentiert wird, anstatt verschoben zu werden.Präsentiere einen UIViewController von einem UINavigationController über den App Delegaten

Dies ist mein aktueller Versuch, der nicht funktioniert und nur ViewController1 beim Start zeigt.

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 
    } 

Ich habe diese Struktur an Ort und Stelle, weil ich es einem Benutzer ermöglichen von links nach rechts und von rechts nach Swipe können links nach viewController2 und viewController3 in ähnlicher Weise zu bekommen, um zu Snapchat. Die Präsentation dieser Controller schien die beste Idee zu sein, da sie keine Navigationsleisten haben. Wenn Sie fertig sind, würden Sie zu ViewController1 zurückkehren wollen - vielleicht muss ich die Struktur meiner App ändern, würde aber im Idealfall nicht möchten, da ich diesen mvp einreichen möchte nächste Woche.

Hilfe sehr geschätzt von Ihnen iOS und schnelle Assistenten.

// Ich denke, ich muss die Struktur der App ändern, um ViewController2 auf dem Navigationsstapel einzuschließen :(da die Verwendung der angenommenen Antwort bewirkt, dass viewController1 kurz zu sehen ist, bevor ViewController2 präsentiert wird, was logisch ist - auf lange Sicht wird dies sein besser trotz der kurzfristigen Schmerz

+0

Für solche Fragen empfehle ich immer zu sehen, [diese Frage] (https:..//stackoverflow.com/questions/19962276/best-practices-for-storyboard-login-screen-handling-clearing-of-data-upon- logou) und seine vielen Antworten – Honey

Antwort

1

rootViewController sollte vor allem festgelegt werden, in dieser Reihenfolge tun und es sollte funktionieren

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

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

Danke @Matt - Hat mir die Haare zerrissen, warum es nicht funktionieren würde, aber alles macht jetzt Sinn – Edward

+0

Gern geschehen. – Matt

+0

Nur Problem ist jetzt, dass ViewController1 zu sehen ist, bevor ViewController2 präsentiert wird, was in diesem Fall nicht ideal ist. – Edward

Verwandte Themen