在 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() 方法的主要内容,如果未能解决你的问题,请参考以下文章
swift 优雅地处理Swift中可本地化的字符串。注意:此代码在Swift 2中,需要在现代Swift中使用更新。
在 Swift 项目中使用 Objective C 类中的 Swift 类
在 Swift 项目中使用 Objective C 类中的 Swift 类