Ich habe versucht, meinen Ansichtscontroller in einem der vorherigen Ansichtscontroller in meinem Ansichtsstapel zu platzieren. Angenommen, es gibt firstVC-, secondVC-, secondVC- und 4thVCviewcontroller in meinem View-Stack. Der aktuelle Ansichtscontroller ist der vierte, und in 4thVC gibt es eine Tabellenansicht. Wenn der Benutzer alle Zeilen in der Tabellenansicht löscht, sollte ich den Benutzer auf secondVC verweisen. Ich hatte die Idee, einen anderen Navigationscontroller zu erstellen und ihn mit dem Befehl presentViewController zu präsentieren. Dies ist jedoch keine Lösung für mein Problem. Weil ich denke, dass ein Navigationsproblem für diesen Fall auftritt. Wie finde ich die beste Lösung für diesen Fall?
Vielen Dank für Ihre Antworten... Mit freundlichen Grüßen
Verwenden Sie anstelle eines generischen popViewControllerAnimated:
-Aufrufs popToViewController:animated:
. Sie könnten feststellen, ob der Benutzer alle Zeilen gelöscht hat. In diesem Fall müssen Sie Folgendes tun (andernfalls blenden Sie nur einen Ansichts-Controller):
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 2], animated: true);
Wenn Sie zu einem bestimmten Ansichtssteuerelement springen möchten und nicht wissen, wie viele Zähler zurückgehen, können Sie Folgendes verwenden:
let viewControllers: [UIViewController] = self.navigationController!.viewControllers as! [UIViewController];
for aViewController in viewControllers {
if(aViewController is ViewControllerYouWantToGoTo){
self.navigationController!.popToViewController(aViewController, animated: true);
}
}
Nach viel Aufwand habe ich die Swift-Erweiterung für einen bestimmten View-Controller in Swift 3.0 erstellt.
extension UINavigationController {
func backToViewController(viewController: Swift.AnyClass) {
for element in viewControllers as Array {
if element.isKind(of: viewController) {
self.popToViewController(element, animated: true)
break
}
}
}
}
Methodenaufruf:
self.navigationController?.backToViewController(viewController: BarCodeScannerVC.self)
Hier können Sie dies tun, indem Sie den Controller vom UINavigationController-Stack finden und mit Hilfe von for loop den Zustand Ihres Wunschcontrollers überprüfen. Wenn die Bedingung erfüllt ist, wird der Zielcontroller aufgerufen.
let viewControllersStack: [UIViewController] = self.navigationController!.viewControllers
for firstViewcontroller in viewControllersStack
{
if firstViewcontroller is desireViewController
{
self.navigationController!.popToViewController(firstViewcontroller, animated: true)
}
}