0

ich habe die folgende Situation:Swift - TabBarController - Entscheiden segue zur Laufzeit

In meinem TabBarController i mehrere Tabs haben und es funktioniert gut, aber:

Das Ziel eines bestimmten Tab ist dynamisch.

Wenn eine bestimmte Bedingung übereinstimmt, sollte diese spezielle Registerkarte einen NavigationViewController öffnen.

Wenn eine andere Bedingung übereinstimmt, sollte diese spezielle Registerkarte einen ViewController öffnen.

Gibt es eingebaute Lösungen?

Wie kann ich das Ziel einer Registerkarte zur Laufzeit ändern?

Grüße und Dank

Antwort

0

Vor langer langer Zeit, in einer Galaxie weit, weit weg ... Segues noch gar nicht gab. So yeah

Der UITabBarController hat einen Setter, in dem Sie die neuen View-Controller übergeben können, die Sie behandeln möchten. Sie werden nicht in der Lage sein zu entscheiden, was zum Zeitpunkt des Tippens auf diese Weise angezeigt wird, aber Sie können die Controller ändern, wenn sich die Bedingung ändert.

open func setViewControllers(_ viewControllers: [UIViewController]?, animated: Bool) 

Wenn Sie jedoch als die Registerkarte angezapft DO müssen entscheiden wird ... Sie könnten Ihre Tab-Controller direkt mit einem Controller, die im Wesentlichen leer ist, und View-Controller-Sicherheitsbehälter für diesen Controller auf die 2 Möglichkeiten zu haben, verwenden es und einen von ihnen versteckt haben. Ziemlich machbar vom Storyboard mit sehr wenig unterstützendem Code. Ich denke, ich bevorzuge diese Option.

func presentAppropriateView() { 
    if condition { 
     performSegue(withIdentifier: "ToNavBar", sender: self) 
    } else { 
     performSegue(withIdentifier: "ToVC", sender: self) 
    } 
} 
0

Wenn Sie lieber Segues verwenden weiterhin, dann können Sie einige condition Variable wie diese eine spezifische Segue in Abhängigkeit vom Zustand der zuführen zur Laufzeit und Aufruf [self.tabBarController setSelectedIndex: 0];

wo der Index Ihrer Wahl sein könnte

0

eine delegierte Methode schreiben, die Sie auf bestimmte Bedingung ausführen möchten: