Запретить вкладке изменять вкладку с определенным индексом - 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
}
}