防止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; } }
我已经实现了UITabBarControllerDelegate
和self.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 } }