Ich habe einen Navigationsstapel mit beispielsweise 5 UIViewControllern. Ich möchte den 3. und 4. Viewcontroller im Stapel auf Knopfdruck im 5. Viewcontroller entfernen. Ist das möglich? Wenn das so ist, wie?
iphone
ios
uiviewcontroller
uinavigationcontroller
Jean Paul Scott
quelle
quelle
Sie können zuerst alle View-Controller im Array abrufen und dann nach Überprüfung mit der entsprechenden View-Controller-Klasse die gewünschte löschen.
Hier ist ein kleiner Code:
Ich denke, das wird Ihre Arbeit erleichtern.
quelle
Swift 3 & 4/5
self.navigationController!.viewControllers.removeAll()
self.navigationController?.viewControllers.remove(at: "insert here a number")
Swift 2.1
alles entfernen:
self.navigationController!.viewControllers.removeAll()
am Index entfernen
self.navigationController?.viewControllers.removeAtIndex("insert here a number")
Es gibt eine Reihe weiterer möglicher Aktionen wie removeFirst, range usw.
quelle
Swift 5:
quelle
return !vc.isKind(of: MyViewController.self) && !vc.isKind(of: MyViewController2.self)
würde den Job in einer Zeile machen :-)Die Verwendung der
setViewControllers
Funktion vonUINavigationController
ist der beste Weg. Es gibt auchanimated
Parameter zum Aktivieren der Animation.Beispiel in schneller Frage
Ich habe es auf andere Weise versucht
[tempVC removeFromParentViewController];
. Es macht seltsames Verhalten, entfernte ViewController-Navigation wird immer noch angezeigt, wenn Popback wie von @ robin-ellerkmann gemeldetquelle
setViewControllers(_:animated:)
Technik tatsächlich auf beide Arten: um mehrere Controller zu platzieren und um mehrere Controller zu pushen.Swift 2.0:
quelle
if var navArray = ... { ... }
Swift 5, Xcode 11.3
Ich fand diesen Ansatz einfach, indem ich angab, welche View-Controller Sie aus dem Navigationsstapel entfernen möchten.
Anwendungsbeispiel:
quelle
Wenn Sie versuchen, vom 5. Ansichts-Controller zum 2. Ansichts-Controller zu wechseln (3. und 4. überspringen), möchten Sie verwenden
[self.navigationController popToviewController:secondViewController]
.Sie können die
secondViewController
vom Navigations-Controller-Stack erhalten.quelle
Benutze das
Es kümmert sich um ViewController von NavigationController. viewController und auch ein Navigationselement, das in der Navigationsleiste gestapelt ist.
Hinweis: Rufen Sie es mindestens nach viewDidAppear auf
quelle
Diese Lösung funktionierte für mich in schnell 4:
Ihr aktueller View Controller-Index im Stapel lautet:
quelle
Swift 5.1, Xcode 11
Stellen Sie sicher, dass Sie diese Dienstprogrammfunktion nach viewDidDisappear () des vorherigen Controllers oder viewDidAppear () des neuen Controllers aufrufen
quelle
Einzelheiten
Lösung
Verwendung
Vollständige Probe
Ergebnis
quelle
Ich habe eine Erweiterung mit Methode geschrieben, die alle Controller zwischen root und top entfernt, sofern nicht anders angegeben.
}}
Wenn Sie den Bereich verwenden möchten (zum Beispiel: 2 bis 5), können Sie ihn einfach verwenden
Getestet auf iOS 12.2, Swift 5
quelle
// Entfernen der Viewcontroller nach Klassennamen vom Stack und anschließendes Schließen der aktuellen Ansicht.
quelle