停止继续并显示警报

使用iOS 5的故事板,我正在执行一个button,我想要的是在我的文本框上进行validation,如果validation失败,我必须停止继续并抛出警报。 什么办法呢?

如果您的部署目标是iOS 6.0或更高版本

您可以简单地在您的源视图控制器上实现shouldPerformSegueWithIdentifier:sender:方法。 使这个方法返回YES如果你想执行这个继续,否则如果你没有。

如果您的部署目标早于iOS 6.0

你将需要改变故事板中的连接方式,并写出更多的代码。

首先,从button的视图控制器设置segue到目标视图控制器,而不是直接从button到目标。 给Segue一个像ValidationSucceeded这样的标识符。

然后,将button连接到其视图控制器上的操作。 在操作中,执行validation,然后执行segue或根据validation是否成功显示警报。 它看起来像这样:

 - (IBAction)performSegueIfValid:(id)sender { if ([self validationIsSuccessful]) { [self performSegueWithIdentifier:@"ValidationSucceeded" sender:self]; } else { [self showAlertForValidationFailure]; } } 

什么对我有用,我相信是正确的答案是使用Apple开发人员指南中find的UIViewController方法:

shouldPerformSegueWithIdentifier:发件人:

我像这样实现了我的方法:

 - (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 } 

我会给你一个例子,这是我的代码:

 - (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]; } 

但似乎没有工作,在所有情况下,我的赛格执行。 答案很简单,我们必须从视图控制器中将它自己的button连接起来。