Conditional Segue in Swift

2019-02-13 16:51发布

I want to do a "connexion" button in my app. And when you tap on it, it will open a new page if you have correct login.

But, I read that we can't undo a segue, I suppose I need to call it manually. Do you have an idea ?

I still tried something like this :

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject) {
    if checkLog == true
    {
     //finish   
    }
    else
   {
    // undo
   }
}

@IBAction func ConexTAP(sender: UIButton)
{
 //check login
}

2条回答
萌系小妹纸
2楼-- · 2019-02-13 17:00

You can do the credentials check in the following method in your ViewController:

func shouldPerformSegueWithIdentifier(_ identifier: String!,
                              sender: AnyObject!) -> Bool

In alternative, you can bind the UIButton to an action in your view controller, perform the checks here and then trigger a segue by code.

查看更多
该账号已被封号
3楼-- · 2019-02-13 17:13

In Swift you can proceed by:

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

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 from ViewControllerA to ViewControllerB with a specific condition.

查看更多
登录 后发表回答