2016-04-25 5 views
0

Ich versuche, eine Vorlage für meine App zu machen ... sagen wir meine App lädt die gleiche Ansicht Controller, der eine CollectionView für 4 Registerkarten hat. Je nach ausgewähltem Index muss ich den Inhalt in die Sammlungsansicht laden. Ich richte die Tab-Leiste manuell von Appdelegate ein. Meine Frage ist: Ist das möglich wie der gleiche Viewer für alle 4 Registerkarten des Tabbarcontrollers gleichzeitig instanziiert. Wenn ja, woher weiß ich, welcher Index ausgewählt ist?Same View-Controller im Tab-Bar-Controller für 4 Tabs gibt falsch ausgewählten Tabcontroller ausgewählten Index

-Code für TabBarController in AppDelegate

   self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
       let tabBarController = UITabBarController() 

       let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 

       let firstImage = UIImage(named: "image1") 
       let secondImage = UIImage(named: "image2") 
       var controllers = [UIViewController]() 
       for var i = 0; i < self.myList.count; i++ { 

       let vc : ViewControllerTwo = storyboard.instantiateViewControllerWithIdentifier("view1") as! ViewControllerTwo 

        if(i == 0 || i == 3) 
        { 
         vc.tabBarItem = UITabBarItem(
          title: self.myList[i], 
          image: firstImage, 
          tag: i) 
         controllers.append(vc) 
        } 
        else 
        { 
         vc.tabBarItem = UITabBarItem(
          title: self.myList[i], 
          image: secondImage, 
          tag: i) 
         controllers.append(vc) 
        } 


       } 


       self.tabBarController.viewControllers = controllers 
       self.window?.rootViewController = self.tabBarController 


       self.self.window?.rootViewController = self.tabBarController 
       self.window?.makeKeyAndVisible() 
+0

Ich glaube, ich beschlossen, es eine Methode mit einem NSTimer verwendet, da manchmal die Änderung und bekommen Staaten gibt schlechten Zustand, wie hier beschrieben http://stackoverflow.com/questions/28099148/switch-tab-bar- programmatically-in-swift – Saty

+0

Sie sollten Ihre Klasse als Delegat für den Tab-Bar-Controller festlegen und dann erhalten Sie einen Aufruf von 'didSelectViewController'. Sie können den ausgewählten View-Controller mit dem 'controllers'-Array vergleichen, um den Index des ausgewählten View-Controllers zu bestimmen – Paulw11

+0

Sie sollten keinen NSTimer benötigen, außer Sie machen etwas falsches ... – Paulw11

Antwort

0

Wenn Sie Ihre Klasse als Delegierter für die Tab-Leiste Controller einstellen, erhalten Sie einen Anruf an die didSelectViewController Delegatmethode erhalten. Sie können dann Ihr controllers Array verwenden, um den Index zu bestimmen;

self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
let tabBarController = UITabBarController() 
tabBarController.delegate = self 


func tabBarController(_ tabBarController: UITabBarController, 
    didSelectViewController viewController: UIViewController) { 

    if let index = self.controllers.indexOf(viewController) { 
     // Do something with index 
    } 
} 
Verwandte Themen