ios переход отменить

В зависимости от возврата XML я не хочу, чтобы текущий segue выполнялся при касании UIButton.

Я знаю, что могу выбрать, какие segue я хочу выполнять, но как сделать так, чтобы segue не выполнялось? Или хотя бы не выполнять ни одно из доступных segues?


person Jacksonkr    schedule 24.01.2012    source источник


Ответы (3)


Если целью развертывания является iOS 6.0 или более поздней версии, вы можете переопределить метод -[UIViewController shouldPerformSegueWithIdentifier:sender:] для возврата YES, если вы хотите выполнить переход, и NO, если нет.

Если ваша цель развертывания более ранняя, чем iOS 6.0, вы не получите сообщение shouldPerformSegueWithIdentifier:sender:. Итак, в вашей раскадровке не рисуйте переход от кнопки. Вместо этого нарисуйте переход из контроллера представления кнопки и дайте переходу идентификатор. Подключите кнопку к IBAction в его контроллере представления. В действии проверьте, хотите ли вы выполнить переход. Если вы хотите это сделать, отправьте себе performSegueWithIdentifier:sender:, передав идентификатор, который вы присвоили переходу в раскадровке.

person rob mayoff    schedule 24.01.2012
comment
[self performSegueWithIdentifier:@"myIdentifier" sender:self]; правильно? Xcode дает мне SIGABRT :( - person Jacksonkr; 25.01.2012
comment
Вам нужно установить точку останова исключения, чтобы увидеть, что происходит не так. - person rob mayoff; 25.01.2012

Документация разработчика Apple содержит правильный метод отмены перехода, который управляется в StoryBoard:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

Например:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"listPopover"]) {
        if (self.listPopover == nil) {
            // Allow the popover segue
            return YES;
        }
        // Cancel the popover segue
        return NO;
    }
    // Allow all other segues
    return YES;
}
person Brenden    schedule 11.12.2012
comment
Сообщение shouldPerformSegueWithIdentifier:sender: было добавлено в iOS 6 и не будет отправляться на устройствах с более ранней версией iOS. Когда этот вопрос был опубликован, iOS 6 еще не была выпущена. - person rob mayoff; 12.12.2012

Ознакомьтесь с этой темой: https://stackoverflow.com/a/42161944/4791032

Вы можете просто проверить это в func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath)

person Bogdan Ustyak    schedule 10.02.2017