Запретить вкладке изменять вкладку с определенным индексом - IOS

Спасибо, что прочитал мой вопрос.

Я пытаюсь реализовать всплывающее меню, когда пользователь нажимает на вкладку с индексом 4. Поэтому я пытаюсь не допустить, чтобы панель управления переключала viewcontroller при нажатии индекса 4.

Вот мой код:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){        
        NSLog(@"NO");
        return NO;
    }else{
        NSLog(@"YES");
        return YES;
    }

}

Я реализовал UITabBarControllerDelegate и self.delegate = self; в viewDidLoad, и он работает, но только один раз.

Когда я нажимаю вкладку индекса 4, меню отображается, и панель не переключает вид (БОЛЬШОЙ), но когда я нажимаю на нее снова, просмотр изменяется, даже если я получаю журнал "НЕТ". Что может быть проблемой здесь?

Спасибо за любые предложения!

решаемые

Благодаря ответу Kasaname ниже я решил его, добавив selectindex и установив его в индекс флага (prevtab). Я изменяю prevtab на индекс последней выбранной вкладки, кроме того, когда пользователь выбирает индекс 4. Мой последний код:

- (BOOL) tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    if(viewController == [tabBarController.viewControllers objectAtIndex:4]){
        self.selectedIndex = prevTab; //only change in this method       
        return NO;
    }else{        
        return YES;
    }

}

Ответ 1

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (tabBarController.selectedIndex == 0) {

    } else if (tabBarController.selectedIndex == 1) {

    } else if (tabBarController.selectedIndex == 2) {

    }
}

почему вы не пользуетесь этим делегатом? Используйте этот делегат, он будет работать, я полагаю,

Ответ 2

Так вы можете остановить/запретить элементы Tabbar для переключения вашей вкладки на элемент табуляции, нажав

Для Swift 3.0

Убедитесь, что вы выполнили UITabBarControllerDelegate и установите UITabbarController делегат

затем переопределите этот делегат в контроллере

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

    if viewController == tabBarController.viewControllers?[2] {
        return false
    } else {
        return true
    }
}