防止tabbar在特定索引处更改选项卡 – IOS

感谢您阅读我的问题。

我试图实现一个popup菜单,当用户点击索引为4的选项卡。所以我试图防止tabbar切换索引4时按下viewcontroller。

这是我的代码:

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

我已经实现了UITabBarControllerDelegateself.delegate = self;viewDidLoad和它的作品,但只是一次。

当我点击索引4选项卡菜单显示和tabbar不切换视图( 伟大 ),但是当我再次单击视图时,即使我得到日志“否”更改视图。 这里可能是什么问题?

谢谢你的任何build议!

解决了

感谢Kasaname的答案,我通过添加selectedIndex来解决它,并将其设置为一个标志索引(prevtab)。 我将prevtab更改为最后选定的选项卡的索引,当用户select索引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; } } 

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

为什么不使用这个委托使用这个委托它将工作,我想

这是如何停止/防止Tabbar项目切换tabbar项目单击您的选项卡

对于Swift 3.0

确保你已经实现了UITabBarControllerDelegate ,并将UITabbarController的代理设置为self

然后在你的控制器中覆盖这个委托

 func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { if viewController == tabBarController.viewControllers?[2] { return false } else { return true } }