В зависимости от возврата XML я не хочу, чтобы текущий segue
выполнялся при нажатии UIButton.
Я знаю, что могу выбрать, какой segue
я хочу выполнить, но как сделать segue
не? Или, по крайней мере, не выполнить любой из доступных segues
?
В зависимости от возврата XML я не хочу, чтобы текущий segue
выполнялся при нажатии UIButton.
Я знаю, что могу выбрать, какой segue
я хочу выполнить, но как сделать segue
не? Или, по крайней мере, не выполнить любой из доступных segues
?
Если целью развертывания является iOS 6.0 или новее, вы можете переопределить метод -[UIViewController shouldPerformSegueWithIdentifier:sender:]
, чтобы вернуть YES
, если вы хотите выполнить segue и NO
, если вы этого не сделаете.
Если ваша цель развертывания выше iOS 6.0, вы не получите сообщение shouldPerformSegueWithIdentifier:sender:
. Поэтому в своем раскадровке не нарисуйте сегу от кнопки. Вместо этого нарисуйте segue из контроллера просмотра кнопок и дайте segue идентификатор. Подключите кнопку к IBAction
в своем контроллере. В действии проверьте, хотите ли вы выполнить сеанс. Если вы хотите выполнить его, отправьте performSegueWithIdentifier:sender:
, передав идентификатор, назначенный для выделения в раскадровке.
Документация разработчика Apple имеет правильный способ отменить segue, который управляется в 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;
}
Посмотрите эту тему: fooobar.com/info/30558/...
Вы можете просто проверить его в func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath)