Предотrotation автоматического popToRootViewController при двойном касании UITabBarController

Поведение UITabBarController по умолчанию заключается в том, чтобы вытащить содержащийся в UINavigationController controller корневого представления, когда вторая вкладка используется во второй раз. У меня есть конкретный случай использования, когда я хочу, чтобы это не работало автоматически, и мне сложно понять, как это предотвратить.

Кто-нибудь сталкивался с этим, и если да, то чем вы занимались? Мне нужно подclassифицировать UINavigationController и переопределить popToRootViewController или есть более простой способ?

Используйте метод tabBarController: shouldSelectViewController: метод протокола UITabBarControllerDelegate .

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

Не забудьте установить делегат controllerа панели вкладок для объекта, который фактически реализует этот метод делегата.

это то, что я сделал:

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

С уважением

Такое поведение немного странно, но удобный ярлык в случае глубокой иерархии!

Вы можете реализовать следующие методы UITabBarControllerDelegate, чтобы отключить ярлык этой системы:

 #pragma mark - #pragma mark UITabBarControllerDelegate - (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { UIViewController *tbSelectedController = tbc.selectedViewController; if ([tbSelectedController isEqual:vc]) { return NO; } return YES; } 

Вот версия Swift 3:

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

Обновление Swift 4.1

Stop Double Tap для всех вкладок.

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

Стоп Дважды нажмите только одну специальную вкладку. Вот он для третьей вкладки.

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

Надеюсь, поможет…

Благодаря!!!

Давайте будем гением компьютера.