我正在尝试实施登录屏幕,当点击登录时,它会执行segue“登录”。
我添加了一个prepareForSegue()覆盖,试图在登录失败时取消它,但是如果出现故障,我没有看到任何取消segue的方法。
这样做的最佳方式是什么?
答案 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)
这将确保仅在成功登录后才转换到控制器。