webentwicklung-frage-antwort-db.com.de

Wie kann man den View Controller schnell auf einen der vorherigen View Controller bringen?

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

20
serhanaksut

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);
32
Aaron Wojnowski

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);
            }
        }
15
BluGeni

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)
7
Arvind Kumar

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)
           }
      }
0