Ich schreibe eine IOS-App in Swift.

Nach dem Navigieren zu VC muss ich alle Ansichts-Controller mit Ausnahme der aktuellen (auf dem Bildschirm) vom Navigations-Controller entfernen. Ich verwende den folgenden Code und er funktioniert einwandfrei. Aber es sieht nicht nach einer optimierten Lösung aus. Jede bessere Lösung wie syntaktischer Zucker wie Map, Filter usw.:

 if let nc = appDelegate().baseNavigationController{
   nc.viewControllers = Array(nc.viewControllers.dropLast(nc.viewControllers.count-1)
 }
2
Sheikh Atif 18 Jän. 2019 im 15:02

3 Antworten

Beste Antwort

Anstatt zu fallen und alles, was Sie einfach verwenden können:

self.navigationController?.viewControllers = [self]
5
Jarvis The Avenger 18 Jän. 2019 im 12:12

Stellen Sie im viewDidLoad Ihres Ansichts-Controllers die Eigenschaft viewControllers Ihres Navigations-Controllers auf den gewünschten Wert ein:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.viewControllers = [self]
}
2
Moe 18 Jän. 2019 im 12:10

Sie können es auch entfernen, indem Sie die Anzahl der vorhandenen View-Controller abrufen und alle außer dem letzten entfernen

if let viewControllerCount = self.navigationController?.viewControllers.count {
    self.navigationController?.viewControllers.removeFirst(viewControllerCount - 1)
}

Wenn Sie 5 Ansichts-Controller haben, würden Sie removeFirst (5-1) aufrufen, damit die ersten 4 Ansichts-Controller entfernt werden können.

0
codeherk 18 Jän. 2019 im 12:35