2016-03-30 13 views
5

Vorrei cambiare un TabBar Item, quando un utente è connesso o meno.Cambia automaticamente l'elemento tabbar?

Ad esempio: ho 5 elementi tabBar diversi, tutti creati uno storyboard.

Ora voglio cambiare il tarbar con l'indice 2 (o tag == 2) quando l'utente non ha un account. Vorrei caricare un altro rootViewController. Il rootViewController non è già un elemento del mio TabBar, vorrei caricare un controller completamente diverso.

Qual è il modo migliore per farlo? Posso semplice modifica l'icona con:

self.tabBar.items![0].selectedImage = UIImage(named: "icon_cal_grey") 

Ma come faccio a cambiare il RootViewController?

Devo farlo qui?

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

    if item.tag == 1 { 
     // ? 
    } 

} 

o dovrebbe creare un malato UINavigationController come RootViewController, e caricare qui la "corretta" ViewController come RootViewController?

risposta

2

Prova questo:

self.tabBar.selectedIndex = 0 

Se volete il cambiamento di viewController

+0

No, non voglio cambiare solo ViewController, voglio cambiare un RootViewController (che non è già un UITabBarItem) – derdida

3

È necessario sostituire il secondo tabulatore ociated viewcontroller da un nuovo viewcontroller. qui è il codice di esempio, che può aiutare a:

NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithArray:self.tabBarController.viewControllers]; 
UIViewController *newVC = [UIViewController new]; 
UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:newVC]; 
[viewControllers replaceObjectAtIndex:1 withObject:newNav]; 
self.tabBarController.viewControllers = viewControllers 
+0

Grazie - ma replaceObjectAtIndex è a Swift non a disposizione. C'è solo un "replaceRange": sai come usarlo? – derdida

+0

@derdida: Sto usando xcode 7.2 e ho trovato questo metodo .. let array: NSMutableArray = NSMutableArray() array.replaceObjectAtIndex (1, withObject: Your_object) –