在Swift中使用shouldPerformSegueWithIdentifier()方法

ide*_*ara 4 iphone segue uistoryboardsegue swift ios8

我试图使用swift的shouldPerformSegueWithIdentifier()方法,但它接受2个参数.这些是(标识符:String!,sender:AnyObject)

我的主要目标是在我的故事板中按下登录按钮时执行代码,并且根据一系列检查返回TRUE或FALSE,具体取决于是否提供了正确的用户名和密码.所以这是我的问题:

  1. 我应该用什么作为标识符?Apple的文档解释说,标识符是一个标识触发的segue的字符串.所以假设我的segue有loginSegueProcess的名字.我如何在我的ViewController中使用它将它分配给我的UIView?问题是我在我的代码中声明了方法,它要求我指定两个参数(标识符和发送者).我怎么能提供论据?

  2. 这种方法真的能满足我的需求吗?我的意思是,如果在点击我的登录按钮时它确实会停止segue过渡,并且取决于是否提供了正确的凭据,它将带你到下一个视图,或者它将显示,例如,一个AlertView.

最后,我认为performSegueWithIdentifier(args)方法也会对我有所帮助.有人知道它们之间的区别吗?

非常感谢提前!

Tom*_*com 7

不是你想做的吗?

override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool {
    if identifier == "LoginSuccessSegue" { // you define it in the storyboard (click on the segue, then Attributes' inspector > Identifier

        var segueShouldOccur = /** do whatever you need to set this var to true or false */

        if !segueShouldOccur {
            println("*** NOPE, segue wont occur")
            return false
        }
        else {
            println("*** YEP, segue will occur")
        }
    }

    // by default, transition
    return true
}
Run Code Online (Sandbox Code Playgroud)

  • 这里的else子句是多余的.你可以在返回true之前打印"***YEP,segue将会出现" (2认同)

Ani*_*ese 1

您不能自己调用 shouldPerformSegueWithIdentifier()​​方法。它将在转换到下一个视图之前自动调用,从而有机会确定是否应该进行转换。您可以有条件地从此方法返回 YES/NO。如果您的情况不涉及任何服务器调用,则对此方法进行简单的逻辑检查就足够了。

performSegueWithIdentifier()用于以编程方式调用 segue。考虑上述网络调用的情况, shouldPerformSegueWithIdentifier()由于身份验证正在进行,您可能会从最初返回 NO。从服务器收到响应后,如果成功,您可以调用 segue 来执行performSegueWithIdentifier(这里的标识符是您在故事板中给出的 ID)。在确保您应该从 . 返回 YES 之前shouldPerformSegueWithIdentifier()

现在是第三种情况,如果您的 segue 是从登录按钮连接的(您必须从控制器本身连接它)。shouldPerformSegueWithIdentifier不再需要检查。performSegueWithIdentifier()您可以在收到服务器的成功响应后调用 segue