禁用当前标签上的轻击手势 (UITabBarController) iPhone 应用

3

目前,当用户点击正在使用的选项卡时,应用程序会移动到该选项卡的第一页。

我想禁用用户当前工作的选项卡上的点击事件。

有什么提示吗?

2个回答

13

你尝试过使用 tabBarController:shouldSelectViewController: 委托方法了吗?希望能对你有所帮助。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {

    id currentViewController = tabBarController.selectedViewController;
    return (viewController != currentViewController);
}

如果选项卡控制器(tab bar controller)的所有视图控制器都是 UINavigationController,则应该按照以下方式处理。

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {

    id nextVC = [(UINavigationController *)viewController topViewController];
    id currentVC = [(UINavigationController *)tabBarController.selectedViewController topViewController];
    return (nextVC != currentVC);
}

对于Swift 4,委托方法如下:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    return viewController != tabBarController.selectedViewController
}

我找到了那个方法,但是需要放入什么代码,我不太确定。 - viral
是的,所有的VC都是UINavigationControllers。为什么要进行(UINavigationController *)类型转换?是为了好的编程习惯吗?其实不进行类型转换也可以正常工作。 - viral
谢谢你的帮助。 - Tommy

0

使用以下方式,它将正常工作

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        if(self.tabBarController.selectedIndex==[[self.tabBarController viewControllers] indexOfObject:viewController])
            return  NO;   
        else
            return YES;
    }

你不需要if-else语句的else部分。如果它返回NO,它就不能返回YES。 - CodaFi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接