To stop segue and show alert

后端 未结 3 603
南旧
南旧 2020-12-04 16:50

Using iOS 5 storyboards, on a button I am performing a segue, what I want is to do validation on my textfield and if validation is failed I have to stop segue and throw an a

相关标签:
3条回答
  • 2020-12-04 17:12

    If your deployment target is iOS 6.0 or later

    You can simply implement the shouldPerformSegueWithIdentifier:sender: method on your source view controller. Make this method return YES if you want to perform the segue, or NO if you don't.

    If your deployment target is earlier than iOS 6.0

    You will need to change the way your segue is connected in the storyboard and write a little more code.

    First, set up the segue from the button's view controller to the destination view controller, instead of directly from the button to the destination. Give the segue an identifier like ValidationSucceeded.

    Then, connect the button to an action on its view controller. In the action, perform the validation and either perform the segue or show an alert based on whether the validation succeeded. It will look something like this:

    - (IBAction)performSegueIfValid:(id)sender {
        if ([self validationIsSuccessful]) {
            [self performSegueWithIdentifier:@"ValidationSucceeded" sender:self];
        } else {
            [self showAlertForValidationFailure];
        }
    }
    
    0 讨论(0)
  • 2020-12-04 17:29

    I'll give you an example, here's my code:

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

    But it seems that's not working, in all cases my segue is performed. The answer is easy, we have to wire the segue from the view controller it self not from the Button.

    0 讨论(0)
  • 2020-12-04 17:33

    What worked for me and what I believe to be the correct answer is to use UIViewController method found in Apple Developer Guide:

    shouldPerformSegueWithIdentifier:sender:

    I implemented my method like so:

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

    Worked like a charm!


    Updated with Swift for >= 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 讨论(0)
提交回复
热议问题