Чтобы остановить Segue и показать предупреждение - PullRequest
39 голосов
/ 23 февраля 2012

Используя раскадровки iOS 5, на кнопке я выполняю переход, я хочу сделать проверку в моем текстовом поле, и если проверка не удалась, я должен остановить переход и выдать предупреждение. Какой способ это сделать?

Ответы [ 3 ]

77 голосов
/ 23 февраля 2012

Если целью развертывания является iOS 6.0 или более поздняя версия

Вы можете просто внедрить метод shouldPerformSegueWithIdentifier:sender: в контроллере представления исходного кода.Сделайте так, чтобы этот метод возвращал YES, если вы хотите выполнить переход, или NO, если вы этого не делаете.

Если ваша цель развертывания более ранняя, чем iOS 6.0

Вам потребуетсяизмените способ соединения вашего сегмента в раскадровке и напишите немного больше кода.

Сначала настройте переход от контроллера представления кнопки к контроллеру представления назначения, а не непосредственно от кнопки до назначения.Присвойте sege идентификатор, такой как ValidationSucceeded.

Затем подключите кнопку к действию на контроллере вида.В действии выполните проверку и выполните переход или покажите предупреждение в зависимости от того, прошла ли проверка успешно.Это будет выглядеть примерно так:

- (IBAction)performSegueIfValid:(id)sender {
    if ([self validationIsSuccessful]) {
        [self performSegueWithIdentifier:@"ValidationSucceeded" sender:self];
    } else {
        [self showAlertForValidationFailure];
    }
}
38 голосов
/ 28 сентября 2012

Что сработало для меня и что я считаю правильным ответом, это использовать метод UIViewController, который можно найти в Руководстве разработчика Apple :

shouldPerformSegueWithIdentifier: sender:

Я реализовал свой метод так:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"Identifier Of Segue Under Scrutiny"]) {
        // perform your computation to determine whether segue should occur

        BOOL segueShouldOccur = YES|NO; // you determine this
        if (!segueShouldOccur) {
            UIAlertView *notPermitted = [[UIAlertView alloc] 
                                initWithTitle:@"Alert" 
                                message:@"Segue not permitted (better message here)" 
                                delegate:nil 
                                cancelButtonTitle:@"OK" 
                                otherButtonTitles:nil];

            // shows alert to user
            [notPermitted show];

            // prevent segue from occurring 
            return NO;
        }
    }

    // by default perform the segue transition
    return YES;
}

Работал как шарм!


Обновлен с помощью Swift для> = iOS 8 :

override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
    if identifier == "Identifier Of Segue Under Scrutiny" {
        // perform your computation to determine whether segue should occur

        let segueShouldOccur = true || false // you determine this
        if !segueShouldOccur {
            let notPermitted = UIAlertView(title: "Alert", message: "Segue not permitted (better message here)", delegate: nil, cancelButtonTitle: "OK")

            // shows alert to user
            notPermitted.show()

             // prevent segue from occurring
            return false
        }
    }

    // by default perform the segue transitio
    return true
}
0 голосов
/ 20 июня 2013

Я приведу пример, вот мой код:

- (IBAction)Authentificate:(id)sender {
if([self WSAuthentification]){
   [self performSegueWithIdentifier:@"authentificationSegue" sender:sender];
}
else
{
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Authetification Failed" message:@"Please check your Identifications" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil, nil];
    [alert show];
}

Но похоже, что это не работает, во всех случаях мой переход выполнен Ответ прост, мы должны подключить переход от контроллера представления, а не от кнопки.

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