2017-01-27 4 views
1

Ich arbeite mit Swift3. Ich habe eine App mit den VCs wie auf dem Bild.Reihenfolge im Navigationscontroller ändern

enter image description here

Im Mainmenu-VC löst der Benutzer den Input-segue. Der Benutzer gibt einen Vornamen in die Eingabe-VC ein. Dies löst den Select-Übergang zu Select-VC aus, um einen Nachnamen auszuwählen und Ausgewähltes-Segment zu Details-VC zu triggern.

Über das Hauptmenü-VC kann der Benutzer auch auf die Details-VC zugreifen. Zurück über NavigationControllerMechanism zum Hauptmenü-VC.

Ich möchte den NavigationControllerMechanism 'Verlauf' ändern, so dass, wenn der Benutzer von der Details-VC über das Selected-Segment eintritt, der vorherige VC von Select-VC zu Mainmenu-VC geändert wird. Also im Grunde, wenn in den Details-VC, die Back immer zum Hauptmenü-VC zurückkehrt.

Ich habe versucht, verschiedene Lösungen aus dem Internet zu kombinieren, ohne Erfolg. Ist das möglich?

Antwort

2

Ja ist es.

Der View-Controller-Stack wird in currentViewController.navigationController? .viewControllers gespeichert.

So sollten Sie so etwas wie machen:

//In Your Details VC : 

override func viewDidAppear(_ animated: Bool) { 

    super.viewDidAppear(animated) 
    guard let stack = self.navigationController?.viewControllers else { return } 
    //get the mainMenu VC 
    let mainVC = stack.first! 
    // Rearrange your stack 
    self.navigationController?.viewControllers = [mainVC, self] 

    //Now you can press "bac" to Main VC 

} 
+0

Werke zu gehen, Vielen Dank! – Vincent

+0

CZ54 - Können Sie bitte erläutern, wie Ihr Code funktioniert? Ich meine, wie das System funktionieren wird. –

+0

@Vincent: upvote geschätzt: D – CZ54

0

Sie möchten, dass Sie Navigationsstapel auf diese Weise ändern, manipulieren kann

let myprofile = storyboard.instantiateViewController(withIdentifier: "Profile1ViewController") as! Profile1ViewController 
    let sourseStack = self.navigationController!.viewControllers[0]; 
     var controllerStack = self.navigationController?.viewControllers 

     let index = controllerStack!.index(of: sourseStack); 
     controllerStack![index!] = myprofile 

     self.navigationController!.setViewControllers(controllerStack!, animated: false); 

zu RootViewController perfekt

dispatch_async(dispatch_get_main_queue(), { 
        self.navigationController?.popToRootViewControllerAnimated(true) 
       }) 
Verwandte Themen