防止tabbar更改特定索引处的选项卡 - IOS

时间:2013-05-28 07:46:18

标签: iphone ios objective-c uitabbarcontroller uitabbaritem

感谢您阅读我的问题。

当用户单击索引为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;
    }

}

2 个答案:

答案 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) {

    }
}

为什么不使用这个委托 使用这个委托,我认为它将起作用