2011-09-09 13 views
7

Para la navegación en mi aplicación, estoy utilizando un UITabBarController. Esto funciona bien, pero en uno de mis controladores de vista quiero insertar otro controlador de vista en la vista de barra de pestañas. En otras palabras, quiero reemplazar el controlador de vista seleccionado por otro. que esté haciendo esto con el siguiente código:Presione otro controlador de vista en una vista UITabBarController

self.tabBarController.selectedViewController = self.otherViewController; 

La lista de viewControllers en mi tabBarController no contiene el otherViewController. Este truco funciona bien en IOS 4.3, pero al IOS 5 no le gusta.

¿Alguien sabe una solución que es aceptada por IOS 5?

Respuesta

12

desea reemplazar ese controlador de vista de la barra de pestañas con otra vista del controlador? Si es así, debe editar la propiedad viewControllers en la barra de pestañas estableciendo una nueva. Sería algo así como:

UIViewController *thisIsTheViewControllerIWantToSetNow; 
int indexForViewControllerYouWantToReplace; 

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

[tabbarViewControllers replaceObjectAtIndex:indexForViewControllerYouWantToReplace withObject:thisIsTheViewControllerIWantToSetNow]; 

self.tabbar.viewControllers = tabbarViewControllers; 

[tabbarViewControllers release]; 
+0

Esto funciona, pero hay que tomar un NSMutableArray (un mutableCopy de la matriz viewController) –

+0

Oh, sí, tienes razón, he escrito que sin Xcode para darme cuenta de replaceObjectAtIndex: withObject no existe a menos que sea un NSMUTABLEArray –

+0

Eso es correcto, pero el icono de tabbar falta y cuando toco otra pestaña y toco hacia atrás, cuando cambio la vista es "lag", creo – user1561904

0

No puede usar simplemente un controlador de navegación o similar en esta pestaña?

De todos modos esto debería funcionar:

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