18

当用户点击标签栏项目时,我想禁用默认操作。

例如,我有一个带有 Tab1、Tab2 和 Tab3 的标签栏。在 Tab1 中,用户可以从 View1 导航到 View3(View1 > View2 > View3)。如果用户在 View3,并且他点击 Tab1,应用程序会将用户带到 View1(根视图控制器)。我想禁用此功能。我不希望 Tab1 上的点击弹出所有视图控制器。我怎样才能做到这一点?

编辑:

这种行为有点奇怪,但在层次结构较深的情况下是一个方便的捷径!

您可以实现以下 UITabBarControllerDelegate 方法来禁用此系统范围的快捷方式:

#pragma mark -
#pragma mark UITabBarControllerDelegate

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc {
    UIViewController *tbSelectedController = tbc.selectedViewController;

    if ([tbSelectedController isEqual:vc]) {
        return NO;
    }

    return YES;
}
4

1 回答 1

22

如果您查看 UITabBarController 委托,则有一个方法:

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

如果你在你的类中实现这个,你可以检查 UIViewController 是否是已经显示的,然后返回 NO,这将阻止这种情况发生。

我对嵌入在 UITabBarController 中的 ABPeoplePicker 对象有同样的问题,因为再次按下已经显示的“联系人”选项卡会使 ABPeoplePicker 控件显示“组”

于 2010-11-16T09:18:06.997 回答