2011-09-09 13 views
7

Per la navigazione nella mia app, sto utilizzando un UITabBarController. Funziona bene, ma in uno dei miei viewcontroller voglio spingere un altro controller di visualizzazione nella vista tabbar. In altre parole, voglio sostituire il viewcontroller selezionato con un altro. Sto facendo questo con il seguente codice:Spingere un altro controller di visualizzazione in una vista UITabBarController

self.tabBarController.selectedViewController = self.otherViewController; 

La lista di viewControllers nel mio TabBarController non contiene l'otherViewController. Questo trucco funziona perfettamente con IOS 4.3, ma a IOS 5 non piace.

Qualcuno conosce una soluzione accettata da IOS 5?

risposta

12

si desidera sostituire quello controller della vista nella barra delle linguette con un altro controller di vista? In tal caso, è necessario modificare la proprietà viewControllers nella barra delle linguette impostandone una nuova. Sarebbe qualcosa di simile:

UIViewController *thisIsTheViewControllerIWantToSetNow; 
int indexForViewControllerYouWantToReplace; 

NSMutableArray *tabbarViewControllers = [self.tabbar.viewControllers mutableCopy]; 

[tabbarViewControllers replaceObjectAtIndex:indexForViewControllerYouWantToReplace withObject:thisIsTheViewControllerIWantToSetNow]; 

self.tabbar.viewControllers = tabbarViewControllers; 

[tabbarViewControllers release]; 
+0

questo funziona, ma si deve prendere un NSMutableArray (un mutableCopy dell'array viewController) –

+0

Oh sì, hai ragione, ho scritto che senza Xcode per farmi capire replaceObjectAtIndex: withObject non esiste se non si tratta di un NSMUTABLEArray –

+0

Questo è wỏk, ma manca l'icona di tabbar e quando tocchi un'altra scheda e tocchi indietro, quando si cambia vista è "lag", penso – user1561904

0

Non è possibile utilizzare un controller di navigazione o simili in questa scheda?

Comunque questo dovrebbe funzionare:

NSMutableArray *controllers = [NSMutableArray arrayWithArray:rootTabBarController.viewControllers]; 
[controllers replaceObjectAtIndex:rootTabBarController.selectedIndex withObject: newController]; 
rootTabBarController.viewControllers = controllers; 
Problemi correlati