2016-07-29 12 views
1

Ich verwende eine Klasse, die UITabBarController erweitert. Ich muss die self.tabBarController.selectedIndex Eigenschaft meiner Klasse festlegen, um Tabs zu wechseln.Programmatisch erhalten Instanz der View-Controller

Da ich diese Variable gesetzt werden soll/rufen eine Methode, die diese Variable aus einer anderen Klasse ändert Ich muss eine Instanz meiner benutzerdefinierten Klasse, die ich an diesen beiden Stellen gesucht, aber sie bisher TabsController

genannt wird beinhalten das Storyboard verwenden und ich tue programmatisch fast alles, infact das ist mein ganzes Drehbuch:

enter image description here

Wie kann ich dieses Problem lösen programmatisch?

Get Instance Of ViewController From AppDelegate In Swift

Access the instance of a Viewcontroller from another in swift

Antwort

2

UITabBarController s rootViewControllermost often used als Anwendungen sind. Während Sie sich nicht mit Storyboards sind nach App-Start, wenn Sie eine Instanz von TabsController als App-Fenster rootViewController setzen, können Sie von überall wie so in der App auf diese Instanz verweisen:

if let tabsController = UIApplication.sharedApplication().delegate?.window??.rootViewController as? TabsController { 
    tabsController.selectedIndex = 2 
} 
+0

Dank! Dieser Code funktioniert. Kurze Frage, du sagst, wenn ich eine Instanz von 'TabsController' auf' rootViewController' setze, dann kann ich mit Hilfe deines Codes auf diese Instanz verweisen. Ich habe diesen Code jedoch nur ausprobiert und es funktionierte, ich habe keinen Code eingegeben, der den 'rootViewController' festlegt. Ist das etwas, worüber ich besorgt sein sollte? – Roymunson

+0

@Roymunson Das Storyboard, das Sie in der Frage haben, setzt wahrscheinlich den Root-View-Controller des Fensters auf "TabsController". Sie können dies überprüfen, indem Sie auf dem Tab [Allgemein] der Registerkarte [Einstellungen] (http://imgur.com/gallery/YqxcI) nachsehen, wo das Storyboard als Einstiegspunkt der Anwendung festgelegt ist. Im Storyboard wird 'TabsController' als 'Initial View Controller' festgelegt (http://imgur.com/I14mM7Z), der dann als Root View Controller gesetzt wird. – gravicle

0

könnten Sie versuchen, diese

let controller = self.tabBarController.viewControllers[self.tabBarController.selectedIndex]