2016-07-06 9 views
0

Ich möchte die ausgewählte Registerkarte umschalten, wenn der Benutzer auf die Registerkarte tippt. Sagen wir mal, wenn ich zwei Registerkarten habe und die erste angezeigt wird, dann sollte das Tippen auf die erste Registerkarte (sowie das Tippen auf die zweite Registerkarte) mich zum zweiten Tab führen. Ich habe einen benutzerdefinierten UITabBarController wie unten dargestellt implementiert.Die Registerkarte kann nicht innerhalb der tabBar geändert werden (tabBar: didSelectItem item :)

class CustomizedTabBarContorller: UITabBarController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
     self.selectedIndex = 1     // this way works 
    } 


    override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 

     if tabBar.items?.indexOf(item) == self.selectedIndex { 
      self.selectedIndex = (selectedIndex == 0) ? 1 : 0 // doesn't work 
     } 
    } 

} 

Wie ändert man die Registerkarte, basierend auf der ausgewählten und angetippten Registerkarte?
UITabBar can't change selected index
UITabBarController Set a Default Tab
... und viele andere:

Ich habe auch betrachtet.

+0

Sie versuchen, den mit den Registerkartenelementen verknüpften Ansichtscontroller dynamisch zu ändern? – anders

+0

Nein. Eigentlich bin ich mir nicht ganz sicher, was du mit "dynamisch" meinst, aber ich habe meinen FirstViewController und meinen SecondViewController immer an ihrer Position mit dem ersten und dem zweiten Balkenelement verbunden. Das ändert sich nicht. – Andrej

+0

Ich glaube, ich verstehe nicht, was Sie erreichen möchten – anders

Antwort

0

Moving self.selectedIndex = self.selectedIndex == 0 ? 1 : 0 zu Hauptwarteschlange löst das Problem. Klappt wunderbar.

if tabBar.items?.indexOf(item) == self.selectedIndex { 
    dispatch_async(dispatch_get_main_queue(), { 
     self.selectedIndex = self.selectedIndex == 0 ? 1 : 0 
    } 
} 
Verwandte Themen