在 Swift 中使用 shouldPerformSegueWithIdentifier() 方法

Posted

技术标签:

【中文标题】在 Swift 中使用 shouldPerformSegueWithIdentifier() 方法【英文标题】:Using shouldPerformSegueWithIdentifier( ) method in Swift 【发布时间】:2014-08-04 07:23:32 【问题描述】:

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

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

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

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

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

提前非常感谢!

【问题讨论】:

【参考方案1】:

这不是你想做的吗?

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

【讨论】:

这里的 else 子句是多余的。您可以在返回 true 之前打印“*** YEP,segue will occur”【参考方案2】:

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

performSegueWithIdentifier() 用于以编程方式调用 segue。考虑上述使用网络调用的情况,您最初可能会从 shouldPerformSegueWithIdentifier() 返回 NO,因为正在进行身份验证。从服务器获得响应后,如果成功,您可以使用performSegueWithIdentifier 调用segue 执行(这里的标识符是您在情节提要中提供的ID)。在确保您应该从 shouldPerformSegueWithIdentifier() 返回 YES 之前。

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

【讨论】:

感谢您的回复。因此,我希望使用您提到的第三种情况。我已经设置了服务器响应并且它可以工作。现在如何设置 segue 的标识符?再次感谢您! 你是否已经设置了从第一个控制器到第二个控制器的 segue? 然后选择segue转到属性检查器,在那里你可以给出标识符

以上是关于在 Swift 中使用 shouldPerformSegueWithIdentifier() 方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在OC中使用Swift如何在Swift中使用OC

swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。

在 Swift 项目中使用 Objective C 类中的 Swift 类

在 Swift 项目中使用 Objective C 类中的 Swift 类

如何在 Swift 中使用 Apple 地图 - 你必须使用 C 还是 Swift 可以?

swift 在swift中使用javascriptcore