如何防止UITabBar的展开?

时间:2018-04-30 03:08:50

标签: ios objective-c uitabbarcontroller segue

我有一个嵌入在UITabBarController中的Show segue。除非满足特定条件,否则当我点击当前选定的选项卡时,我想阻止展开segue。我尝试过使用shouldPerformSegueWithIdentifiercanPerformUnwindSegueAction,但在以这种方式展开时似乎都没有触发。

1 个答案:

答案 0 :(得分:2)

通过标签栏上的unwind segue不确定您的意思,但如果您想阻止更改标签,则UITabBarController上有一个委托功能用于此目的。

将协议添加到标签栏类。

@interface YourTabbarViewController () <UITabBarControllerDelegate>

@end

分配委托,然后再实现该功能。

@implementation YourTabbarViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.delegate = self;
}

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

    if (preventTabChange)
        return NO;

    return YES;
}

更新

好的,假设您已经在此图片上设置了相关部分,并且您希望在满足某些条件时阻止从B到A的展开。我的解决方案如上所述将起作用。

enter image description here

导航控制器即将变为活动状态时,您将获得查询/通知,您可以创建自己的子类来保存您需要的任何信息,以确定它是否应该是允许从子视图控制器显示或展开。在这种情况下,您的预防可能如下所示(扩展上面的shouldSelectViewController):

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

    if ([viewController isKindOfClass:[YourNavigationController class]]) {
        if ([(YourNavigationController *)viewController preventUnwind])
            return NO;
    }

    return YES;
}

请注意,我故意选择preventUnwind作为自定义类中的标志来说明要做什么。当您将移动到视图控制器时,这将默认为NO,从而允许这样做。

请勿忘记将YourTabbarViewController设置为 Tabbar View Controller YourNavigationController的类作为导航控制器图片。