Swift prepareForSegue取消

Tri*_*Man 39 ios swift

我正在尝试实现登录屏幕,当点击登录时它会执行segue"登录".

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

做这个的最好方式是什么?

Gre*_*reg 88

shouldPerformSegueWithIdentifier如果登录失败,您应该覆盖并返回false:

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

更新为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
}
Run Code Online (Sandbox Code Playgroud)

//扩展

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

if loginSuccess {
    performSegueWithIdentifier("login", sender: nil)
}
Run Code Online (Sandbox Code Playgroud)

  • @SimonBengtsson否,但是您可以重写`prepare(for segue:UIStoryboardSegue,sender:Any?)`。 (2认同)

Ale*_*erg 19

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

然后,您可以从登录按钮创建IBAction函数,并执行performSegueWithIdentifier.它应该看起来像这样:

@IBAction func loginButtonTapped(sender: UIButton) {
    if loginSuccess {
        performSegue(withIdentifier: "login", sender: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

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