感谢您阅读我的问题。
当用户单击索引为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选项卡时,菜单显示并且标签栏不会切换视图( GREAT ),但是当我再次单击它时,即使我收到日志“否”,视图也会更改。 这可能是什么问题?
感谢您的任何建议!
解决
感谢Kasaname在下面的回答,我通过添加selectedindex并将其设置为标志索引(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;
}
}
答案 0 :(得分:7)
这是阻止/阻止Tabbar项目在tabbar项目上单击
切换选项卡的方法适用于Swift 3.0
确保您已实施 UITabBarControllerDelegate 并将 UITabbarController 的 委托 设置为 自 强>
然后在控制器中覆盖此委托
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController == tabBarController.viewControllers?[2] {
return false
} else {
return true
}
}
答案 1 :(得分:4)
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.selectedIndex == 0) {
} else if (tabBarController.selectedIndex == 1) {
} else if (tabBarController.selectedIndex == 2) {
}
}
为什么不使用这个委托 使用这个委托,我认为它将起作用