tab create bar iphone uinavigationcontroller uitabbarcontroller

iphone - create - Impedir que popToRootViewController se ejecute dos veces en UITabBarController



uitabbarcontroller programmatically swift (5)

El comportamiento predeterminado de un UITabBarController es hacer estallar el UINavigationController contenido en el 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 automáticamente, y me resulta difícil descubrir cómo evitarlo.

¿Alguien se ha topado con esto, y si es así, qué hiciste? ¿Debo subclasificar UINavigationController e invalidar popToRootViewController o hay una forma más sencilla?


Aquí está la versión Swift 3:

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


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; }


Esto es lo que hice:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { if ([[tabBarController viewControllers] objectAtIndex:[tabBarController selectedIndex]] == viewController) return NO; return YES; }

Saludos


Actualizar Swift 4.1

Stop Double Tap para todas las pestañas.

extension TabBarController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { //for blocking double tap on all tabs. return viewController != tabBarController.selectedViewController }}

Detener doble toque en una sola pestaña específica. Aquí está para la tercera pestaña.

extension TabBarController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { //for blocking double tap on 3rd tab only let indexOfNewVC = tabBarController.viewControllers?.index(of: viewController) return ((indexOfNewVC != 2) || (indexOfNewVC != tabBarController.selectedIndex)) }}

Espero eso ayude...

¡¡¡Gracias!!!


Utilice el tabBarController:shouldSelectViewController: del protocolo UITabBarControllerDelegate .

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

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