2016-01-30 5 views
5

Bei App-Start habe ich UITabBarController als Root-View-Controller. Für diese Tableiste habe ich insgesamt 7 ViewControllers. Innerhalb AppDelegate.swift in Verfahren application(application:didFinishLaunchingWithOptions:), wenn ich folgende, funktioniert es richtig:Wählen Sie einen Index größer als 3 für UITabBarController bei App-Start funktioniert nicht

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 
     self.tabBarController = self.window?.rootViewController as! UITabBarController 
     self.tabBarController.selectedIndex = 2 

     return true 
    } 

Das funktioniert perfekt und das dritte Element in der Tab-Leiste ausgewählt wird, wenn die Anwendung gestartet wird.

Aber wenn ich irgendein Element auswählen möchte, das unter dem mehr Navigation Controller gegangen ist (was jeden Index über 3 bedeutet), funktioniert self.tabBarController.selectedIndex = 5 einfach nicht. Die erwähnte Anweisung funktioniert nach dem Start der App an jedem beliebigen Punkt, d. H. Wenn ich self.tabBarController.selectedIndex = 5 innerhalb der viewDidAppear des ersten ViewControllers mache, funktioniert es; aber es funktioniert nicht zum Zeitpunkt des App-Starts, d.h. in application(application:didFinishLaunchingWithOptions:). Das ausgewählte Element der Registerkartenleiste bleibt nach dem Start unverändert. Wie kann ich den ausgewählten Index beim Start der App über 3 hinaus ändern (was unter moreNavigationController geht)?

+0

http://stackoverflow.com/a/33375674/2303865 –

+0

@Leo Dabus, ich möchte Deep-Link von Push-Benachrichtigung beim Start der Anwendung behandeln. Wenn also meine App nicht läuft und Push-Benachrichtigungen erhalten, klicke ich auf Push-Benachrichtigung. Zu diesem Zeitpunkt wird 'application (application: didFinishLaunchingWithOptions:)' ausgelöst, aber der erste View-Controller ist noch nicht geladen. Wie funktioniert mein Beobachter zu diesem Zeitpunkt, da die View-Controller-Instanz nicht beobachtet werden kann? –

+0

Ich habe Ihren Vorschlag versucht. Leider funktioniert es nicht :( –

Antwort

0

Versuchen Sie,

// Override point for customization after application launch. 
     self.tabBarController = self.window?.rootViewController as! UITabBarController 
     self.tabBarController.selectedIndex = 2 
     self.tabBarController.view.layoutIfNeeded() 

     return true 
0

Wenn Sie Storyboard verwenden. This Antwort funktionierte für mich können Sie eine Inspectable Var in Ihrer TabBarController-Klasse erstellen und die Indexnummer im Storyboard angeben.