停止继续并显示警报
使用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连接起来。