我有一个嵌入在UITabBarController中的Show segue。除非满足特定条件,否则当我点击当前选定的选项卡时,我想阻止展开segue。我尝试过使用shouldPerformSegueWithIdentifier
和canPerformUnwindSegueAction
,但在以这种方式展开时似乎都没有触发。
答案 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的展开。我的解决方案如上所述将起作用。
当导航控制器即将变为活动状态时,您将获得查询/通知,您可以创建自己的子类来保存您需要的任何信息,以确定它是否应该是允许从子视图控制器显示或展开。在这种情况下,您的预防可能如下所示(扩展上面的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
的类作为导航控制器图片。