Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

вот что я сделал:

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

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

            return NO;

    return YES;

}

рассматривает

Ответ 3

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

Вы можете реализовать следующие методы 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;
}

Ответ 4

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

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