Как я могу отменить переход, который связан с UIButton - PullRequest
6 голосов
/ 23 марта 2012

Я работаю над этим учебным пособием , в котором показано, как создать приложение с раскадровками. Мой viewController имеет две кнопки UIB, и я подключил переход к этим кнопкам UIB. Эти сегменты выдвигают новый viewController.

Теперь я ищу способ отменить этот переход, если определенное условие становится истинным. Когда я использовал старые xib-файлы для создания своего интерфейса, я смог сделать что-то вроде этого:

-(IBAction)sendButton:(id)sender {
  if(TRUE) {
    // STOP !!  
  }
}

Это больше не работает. Как я могу отменить отправку нового viewController?

Ответы [ 2 ]

27 голосов
/ 23 марта 2012

Неа. Вы не можете отменить сегменты, которые напрямую связаны с такими элементами интерфейса, как ваша UIButton.

Но есть обходной путь.

  1. Удалить переход, который связан с кнопкой
  2. Добавьте переход от viewController (тот, что с кнопкой) к viewController, который нужно нажать. Это должен быть переход, который не связан с элементом интерфейса. Для этого вы можете запустить переход из строки состояния. Или создайте переход в левой боковой панели.
  3. Выберите этот переход, откройте инспектор атрибутов и измените Идентификатор перехода (например, PushRedViewController)
  4. Выберите представление помощника Xcodes, чтобы вы могли увидеть .h файл viewController с помощью кнопки.
  5. Подключите кнопку к действию. Для этого выберите кнопку и перетащите ее в .h файл. Выберите действие в меню и назовите свое действие (например, redButtonPressed:)
  6. Откройте реализацию вашего viewController
  7. изменить действие с шага 5 на что-то вроде этого:

    - (IBAction)redButtonPressed:(id)sender {
        [self performSegueWithIdentifier:@"PushRedViewController" sender:sender];
    }
    
10 голосов
/ 12 января 2015

На самом деле вы можете сделать это, добавив следующий метод в ваш код

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

if([identifier isEqualToString:@"btnSegue"])
{

   return YES;
}
else{
    return NO;
}

}

Предположим, что ваш переход btnSegue.А если вам нужно, чтобы переход выполнялся на основе некоторого условия, вы можете иметь следующий код

if(check)
{
 [self performSegueWithIdentifier:@"btnSegue" sender:self];
}

Где проверка - это BOOL, которую вы можете установить в значение true или false в зависимости от вашего состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...