19

感谢您阅读我的问题。

当用户单击索引为 4 的选项卡时,我试图实现一个弹出菜单。所以我试图阻止选项卡栏在按下索引 4 时切换视图控制器。

这是我的代码:

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

}

我已经实现了andUITabBarControllerDelegate并且它可以工作,但只有一次。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;
    }

}
4

2 回答 2

15

这是您可以停止/防止标签栏项目在标签栏项目点击上切换标签的方法

对于 Swift 3.0

确保您已实现UITabBarControllerDelegate并将UITabbarController委托设置为self

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

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

    if viewController == tabBarController.viewControllers?[2] {
        return false
    } else {
        return true
    }
}
于 2017-05-21T16:44:28.243 回答
5
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    if (tabBarController.selectedIndex == 0) {

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

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

    }
}

为什么你不使用这个委托使用这个委托我想它会起作用

于 2013-05-28T07:57:48.050 回答