2016-07-03 1 views
1

Ich habe Probleme herauszufinden, wie ViewControllers ordnungsgemäß zu zerstören. In meinem Projekt habe ich 3 View-Controller. The Storyboard Layout (IMG)Swift - Weg von der modalen Ansicht weg, ViewController nicht richtig zu zerstören

Der erste View-Controller wechselt zum zweiten View-Controller. Der zweite View-Controller wechselt modal zur dritten Ansicht. Wenn die dritte Ansicht auf dem Bildschirm angezeigt wird, ist der zweite Bildschirm immer noch im Hintergrund zu sehen (die dritte Ansicht hat einen transparenten Hintergrund).

Wenn ich jedoch vom dritten View-Controller weg und zurück zum ersten View-Controller gehe, wird der zweite View-Controller, der im Hintergrund ist, nicht zerstört. Ich loggte die Controller-Lifecycle-Ereignissen Ansicht zu veranschaulichen, was ich meine:

viewDidAppear - ViewController1 
viewWillDisappear - ViewController1 
viewDidAppear - ViewController2 
viewDidAppear - ViewController3 
viewWillDisappear - ViewController3 
viewDidAppear - ViewController1 

Wie Sie aus den oben Konsole Druckanweisungen sehen kann, wird ViewController2 nie irgendwo zerstört. Logischerweise ging ich davon aus, dass es zusammen mit ViewController3 zerstört würde, wenn VC3 zurück zu VC1 geleitet würde. Dies ist jedoch nicht der Fall, höchstwahrscheinlich aufgrund der Feinheiten, wie modale Ansichten in Swift funktionieren.

Wie kann ich das beheben? Ich brauche VC2 zu rufen ViewWillDisappear

+0

Verwenden Sie einen ** Abroller segue ** zu VC1 zurückzukehren. Siehe: http://Stackoverflow.com/q/12561735/1630618 – vacawama

+0

DANKE! Die Abwickelstrecke war genau das, wonach ich gesucht hatte – user3161770

Antwort

0

Ich fürchte, Sie missverstanden segue. Von segue von ViewController3 bis ViewController1 erstellen Sie nur eine weitere Instanz von ViewController1, die über ViewController3 stapeln. Du gehst nicht zurück.

Sie sollten eine UINavigationController verwenden, die eine rootViewController an Ihre ViewController1 halten. Die segue drücken Sie eine ViewController2 und die Taste modal eine segue zu ViewController3.

Auf ViewController3 Sie müssen es programmatisch im Code entlassen mit dismissViewControllerAnimated(true) dann eine navigationController?.popViewControllerAnimated(true) durchführen, um ViewController1

Verwandte Themen