在Swift中使用shouldPerformSegueWithIdentifier()方法

时间:2014-08-04 07:23:33

标签: iphone swift segue ios8 uistoryboardsegue

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

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

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

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

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

    提前多多感谢!

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

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

performSegueWithIdentifier()用于以编程方式调用segue。考虑上面的网络呼叫情况,您可以从shouldPerformSegueWithIdentifier()开始返回NO,因为身份验证正在进行中。从服务器获得响应后,如果成功,您可以调用segue以performSegueWithIdentifier执行(此处标识符是您在故事板中给出的ID)。在确保你应该从shouldPerformSegueWithIdentifier()返回YES之前。

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