Как я могу предотвратить переход от UITabBar? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть Show segue, который встроен в UITabBarController. Я хочу предотвратить переход к следующему этапу, когда нажимаю на выбранную вкладку, если не выполняется определенное условие. Я пытался использовать shouldPerformSegueWithIdentifier и canPerformUnwindSegueAction, но ни один из них не запускается при таком раскручивании.

1 Ответ

0 голосов
/ 30 апреля 2018

Не уверен, что вы подразумеваете под "раскруткой", переходя к панели вкладок, но если вы хотите предотвратить изменение вкладки, для этого есть функция делегата на 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;
}

UPDATE

ОК, при условии, что вы настроили соответствующие детали, как на этом рисунке, и хотите запретить раскрутку от B до A, если выполняются определенные условия. Мое решение, как описано выше, будет работать.

enter image description here

Поскольку вы будете получать запрос / уведомление всякий раз, когда Navigation Controller собирается стать активным, вы можете создать свой собственный подкласс этого класса, в котором будет храниться любая информация, необходимая вам для принятия решения о том, следует ли ему разрешить показывать или раскручивать с контроллера подвид. В этом случае ваша профилактика может выглядеть следующим образом (расширение shouldSelectViewController выше):

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

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

    return YES;
}

Обратите внимание, что я специально выбрал preventUnwind в качестве флага в вашем пользовательском классе, чтобы сказать, что делать. По умолчанию это значение будет NO, когда вы перемещаете в контроллер вида и, таким образом, разрешаете это.

Не забудьте установить YourTabbarViewController в качестве класса для Controller View Tabbar и YourNavigationController в качестве Navigation Controller на рисунке.

...