Ich habe eine ContainerVC
, die eine Variable controllerToLoad
enthält. Standardmäßig ist es "MainVC", aber wenn ich auf einen Menüpunkt klicke, möchte ich die ContainerVC
präsentieren, aber anstatt MainVC
zu laden, möchte ich SecondVC
laden. lade ich die MainVC in der ViewDidLoad Methode meiner ContainerVC durch die folgenden Schritte ausführen:viewDidLoad() Aufruf vor prepareForSegue() Ausführungen: Swift
if let controller = self.storyboard?.instantiateViewControllerWithIdentifier(controllerToLoad) {
self.mainViewController = controller
}
Ich dachte, den besten Weg, dies von Segue ist zu tun, so nenne ich die folgenden Codezeilen:
self.performSegueWithIdentifier("MenuSegue", sender: self)
Da ist in meinem prepareForSegue
ich folgendes tun:
if (segue.identifier == "MenuSegue"){
let secondViewController = segue.destinationViewController as! ContainerViewController
secondViewController.controllerToLoad = "SecondVC"
}
Aus irgendeinem Grund, wenn performSegueWithIdentifier
nannte es lädt automatisch die ContainerVC
und beginnt mit dem Setzen von self.mainViewController
auf "MainVC", anstatt darauf zu warten, dass prepareForSegue
ausgeführt wird. Ich weiß nicht, warum es nicht darauf wartet, prepareForSegue
zu beenden.
Ich habe das getestet, indem ich eine Reihe von Druckanweisungen hinzugefügt habe. direkt vor self.performSegueWithIdentifier
und vor secondViewController.controllerToLoad = "SecondVC"
und in ViewDidLoad
von meinem ContainerVC
. die Druckanweisungen Nach der Zugabe wurde mir klar, dass, sobald performSegueWithIdentifier
in der Tat genannt wird, direkt nachdem es ViewDidLoad
von ContainerVC
ruft dann
let secondViewController = segue.destinationViewController as! ContainerViewController secondViewController.controllerToLoad = "SecondVC"
Ja, Sie hatten Recht. Ich habe meinen ContainerVC-Code genommen und ihn in eine Methode eingefügt, die den self.mainViewController auf eine Variable setzt, die ich überlasse. Toller Hinweis! –