2010-11-16 14 views
16

Quiero deshabilitar la acción predeterminada cuando el usuario toca el ítem tabbar.Deshabilitar acción: el usuario toca el ítem tabbar para ir al controlador de vista raíz

Por ejemplo, tengo una barra de pestañas con Tab1, Tab2 y Tab3. En la pestaña 1, el usuario puede navegar de View1 a View3 (View1> View2> View3). Si el usuario está en View3 y pulsa Tab1, la aplicación lleva al usuario a View1 (el controlador de la vista raíz). Quiero deshabilitar esta funcionalidad No quiero que el toque en Tab1 muestre todos los controladores de vista. ¿Cómo puedo hacer eso?

Editar:

Este comportamiento es un poco extraño, pero un atajo a mano en caso de jerarquía profunda!

Puede implementar siguiendo métodos UITabBarControllerDelegate desactivar este sistema de ancho de acceso directo:

#pragma mark - 
#pragma mark UITabBarControllerDelegate 

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *tbSelectedController = tbc.selectedViewController; 

    if ([tbSelectedController isEqual:vc]) { 
     return NO; 
    } 

    return YES; 
} 

Respuesta

19

si nos fijamos en el delegado UITabBarController hay un método:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

Si decide implementar esta en su clase , puede verificar si el UIViewController ya se muestra y luego devolver NO, lo que evitará que esto suceda.

tuve el mismo problema con un objeto incrustado en un ABPeoplePicker UITabBarController, en el que al pulsar la pestaña 'Contactos' por segunda vez que ya estaba representada haría que el control de ABPeoplePicker mostrar los 'Grupos'

+0

funcionó! Gracias. – Mustafa

Cuestiones relacionadas