简体   繁体   中英

Conditional Segue Using Storyboard

I just need to know how to make some 'conditional' redirect / segue to some view. For example :

If user haven't login yet, then a view with login form appears. But if user logged in already, they will see their profile view.

How to make conditional segue like that using storyboard?

Thank you

For conditional segues, don't start a segue from a button as you normally do. Instead of that use the following steps:

  1. In your storyboad, start a segue directly from the source view controller to the destination view controller. For doing this, you can drag your source view controller's icon on the bar just below the view to the destination view controller on the main canvas area. Just remember you have to connect two view controllers directly and not with any control.

  2. Enter a suitable segue identifier for this segue. For example say "conditionSegue"

  3. Now, in your source view controller's .m file perform your condition and call -performSegueWithIdentifier:sender: method on "self" like this:

     -(void)loadDestinationVC{ if(condition == YES){ [self performSegueWithIdentifier:@"conditionSegue" sender:nil]; } } 

I hope I made it clear.

I believe a better approach if you want to use segues from buttons would be to use this:

First create a button and use a segue to connect it to another view, give this segue a name

then use this method in your .m file

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"SegueName"]) {
        //Check if should make the segue 
        //if not do something
        [self doSomething];
        //and return NO;
        return NO;
    }
    return YES;
    }

In Swift you could do : as @Gaurav Singh suggested in his answer

Step 1: Insert a segue from ViewControllerA to ViewControllerB. The segue should start from ViewControllerA itself and not from any control ( like Button ) in it.

Step 2: Give segue an unique identifier in storyboard. Ex: seageFromAtoB

Step 3 : In your ViewControllerforA.swift write :

if(condition == true) {
    self.performSegueWithIdentifier("seageFromAtoB", sender: self)
}

If you are performing some task in some other Thread then using performSegueWithIdentifier can throw an exception.

If you get this error then you should use :

if(condition==true){
      NSOperationQueue.mainQueue().addOperationWithBlock {
           self.performSegueWithIdentifier("seageFromAtoB", sender: self)
      }
}

This will perform segue redirection in main Thread .

Hope this help for someone looking for Swift option

You make the segues directly from one controller to another (or others), and give them identifiers. In code you call choose between segues depending on your conditions, and call performSegueWithIdentifier:sender:.

Create "generic" segue by ctrl dragging from the view controller icon at the bottom to the destination. This segue won't be associated with any action. Then, in your code where ever the event is using your conditional code that you want to trigger the segue, call:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM