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

Pap*_*ick 19 iphone objective-c uitabbarcontroller uitabbaritem ios

感谢您阅读我的问题.

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

}
Run Code Online (Sandbox Code Playgroud)

我已经实现了UITabBarControllerDelegate,并self.delegate = self;viewDidLoad和它的作品只是一个时间.

当我单击索引4选项卡时,菜单显示并且tabbar没有切换视图(GREAT),但是当我再次单击它时,即使我得到Log"NO",视图也会改变.这可能是什么问题?

谢谢你的任何建议!

解决了

感谢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;
    }

}
Run Code Online (Sandbox Code Playgroud)

Val*_*riy 10

这是您可以停止/阻止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
    }
}
Run Code Online (Sandbox Code Playgroud)


Kas*_*ame 5

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

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

你为什么不使用这个代表,我想这个代表可以用