Swift prepareForSegue取消

时间:2015-03-05 16:40:02

标签: ios swift

我正在尝试实施登录屏幕,当点击登录时,它会执行segue“登录”。

我添加了一个prepareForSegue()覆盖,试图在登录失败时取消它,但是如果出现故障,我没有看到任何取消segue的方法。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:82)

您应该覆盖shouldPerformSegueWithIdentifier并在登录失败时返回false:

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
    if let ident = identifier {
        if ident == "YourIdentifier" {
             if loginSuccess != true {
                  return false
             }
         }
     }
     return true
}

更新SWIFT 3 Swift 3方法现在称为shouldPerformSegue

    override func shouldPerformSegue(withIdentifier identifier: String?, sender: Any?) -> Bool {
    if let ident = identifier {
        if ident == "YourIdentifier" {
            if loginSuccess != true {
                return false
            }
        }
    }
    return true
}

//扩展

如果以编程方式调用performSegueWithIdentifier,则不会调用此方法,但不需要调用此方法,您可以将其称为登录成功,否则忽略它:

if loginSuccess {
    performSegueWithIdentifier("login", sender: nil)
}

答案 1 :(得分:19)

您可以从View Controller执行segue,而不是从指定按钮执行。您可以通过从故事板上VC顶部的黄色按钮进行按住Ctrl键拖动来完成此操作。记得给segue一个标识符!

然后您可以从登录按钮创建IBAction函数并执行performSegueWithIdentifier。看起来应该是这样的:

@IBAction func loginButtonTapped(sender: UIButton) {
    if loginSuccess {
        performSegue(withIdentifier: "login", sender: nil)
    }
}

然后,在prepare(:)中,你可以为segue做额外的设置,因为它会在实际的segue发生之前被调用。

答案 2 :(得分:0)

您可以使用shouldPerformSegue并返回false,从而阻止所有segue。 例如:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    return false 
}

然后,成功登录后,像下面这样调用performSegue:

performSegue(withIdentifier: "YourSegueIdentifier", sender: nil)

这将确保仅在成功登录后才转换到控制器。