首页>Program>source

感谢您阅读我的问题。

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

这是我的代码:

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

我已经实现了 UITabBarControllerDelegateself.delegate = self;viewDidLoad 而且它只能工作一次.

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

谢谢您的任何建议!

SOLVED

感谢下面的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;
    }
}
最新回答
  • 1月前
    1 #

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

    为什么不使用此委托

    i

    使用此委托可以正常工作

  • 1月前
    2 #

    这是您可以停止/阻止Tabbar项以切换Tabbar项上的选项卡的方法

    For Swift 3.0

    确保已实施 UITabBarControllerDelegate 并设置 UITabbarControllerdelegateself

    然后在您的控制器中覆盖此委托

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        if viewController == tabBarController.viewControllers?[2] {
            return false
        } else {
            return true
        }
    }
    

  • java:PostgreSQL,JDBC和流式BLOB
  • c:杀死功能是否同步?