iphone - uitabbarcontroller programmatically swift 4
Acción de desactivación: el usuario pulsa en el elemento de la barra de pestañas para ir al controlador de vista raíz (1)
Quiero deshabilitar la acción predeterminada cuando el usuario toca el elemento de la barra de pestañas.
Por ejemplo, tengo una barra de pestañas con Tab1, Tab2 y Tab3. En Tab1, el usuario puede navegar desde Vista1 a Vista3 (Vista1> Vista2> Vista3). Si el usuario está en View3, y toca la Tab1, la aplicación lleva al usuario a View1 (el controlador de 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 es un atajo útil en caso de una jerarquía profunda.
Puede implementar los siguientes métodos de UITabBarControllerDelegate para deshabilitar este acceso directo de todo el sistema:
#pragma mark -
#pragma mark UITabBarControllerDelegate
- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
UIViewController *tbSelectedController = tbc.selectedViewController;
if ([tbSelectedController isEqual:vc]) {
return NO;
}
return YES;
}
Si nos fijamos en el delegado UITabBarController hay un método:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Si implementa esto en su clase, puede verificar si UIViewController es el que ya se muestra y luego devolver NO, lo que evitará que esto suceda.
Tuve el mismo problema con un objeto ABPeoplePicker incrustado en un UITabBarController, al presionar la pestaña ''Contactos'' una segunda vez que ya estaba desplegada haría que el control ABPeoplePicker muestre los ''Grupos''