2009-12-04 9 views
28

El comportamiento predeterminado de un UITabBarController es mostrar el UINavigationController contenido al controlador de vista raíz cuando se toca una pestaña en particular por segunda vez. Tengo un caso de uso particular en el que deseo que esto no funcione de manera automática, y estoy teniendo dificultades para descubrir cómo prevenir esto.Prevenir popToRootViewController automático al tocar dos veces en UITabBarController

¿Alguien se ha topado con esto? Si es así, ¿qué hiciste? ¿Necesito subclasificar UINavigationController y reemplazar popToRootViewController o hay una manera más simple?

Respuesta

56

Utilice el método tabBarController:shouldSelectViewController: del UITabBarControllerDelegate protocol.

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { 
    return viewController != tabBarController.selectedViewController; 
} 

No se olvide de establecer el delegado del controlador de la barra de pestañas al objeto de que en realidad implementa este método delegado.

+0

brillante. No sé cómo me lo perdí en el protocolo de delegado. Funcionó a las mil maravillas. ¡Gracias! – NilObject

+0

Muy agradable. ¡Gracias por compartir! – pmk

14

esto es lo que hice:

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

    if ([[tabBarController viewControllers] objectAtIndex:[tabBarController selectedIndex]] == viewController) 

      return NO; 

    return YES; 

} 

respecto

1

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

Puede implementar siguiendo métodos UITabBarControllerDelegate para 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; 
} 
0

Aquí está la versión Swift 3:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
    return viewController != tabBarController.selectedViewController 
} 
Cuestiones relacionadas