Swift:如果条件不满足,则继续执行 segue
Posted
技术标签:
【中文标题】Swift:如果条件不满足,则继续执行 segue【英文标题】:Swift: Keep segue from executing if condition not met 【发布时间】:2016-05-12 03:04:59 【问题描述】:目前我正在我的应用程序中处理两个不同的 ViewController,我们可以将它们称为 VC1 和 VC2。 VC1 显示一个注册表单,在 UITableView 的每一行中都有一个问题,并有一个编辑按钮。编辑按钮是从 VC1 和 VC2 开始的。 VC2 显示一个允许用户编辑问题的界面。我想编写应用程序,以便您无法从 VC1 切换到 VC2,除非您选择了要编辑的问题(行)。现在我已经设置了一些,但有可能我把它倒过来了。
在 VC1 中:
// this method isn't called until VC2 segues back to VC1... so I don't know how
// to make sure that a selection has been made before pressing the button
@IBAction func editQuestion(segue:UIStoryboardSegue)
if let editQuestion = segue.sourceViewController as? VC2
在 VC2 中:
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject!) -> Bool
// check to make sure that user has completed all fields of question
// if they haven't completed all fields, return false (do not segue)
// else segue to VC1
【问题讨论】:
在调用 performSegueWithIdentifier() 之前,应该在 VC1 中执行 segue 之前的检查 是的,我明白这一点。不过,我不确定该怎么做。你有什么想法吗?我现在的结构不适合这样做。 你如何调用 VC2 的 segue?它连接在故事板中吗? 是的。两者都连接到故事板。我在 VC1 到 VC2 中按住 ctrl 单击编辑按钮,然后在 VC2 中按住保存按钮到 VC2 的出口,然后将其发送到 VC1 中的 editQuestion 函数。一切都已连接并正确连接,我只是不知道如何在按下编辑之前检查是否选择了问题。 问题。假设我在 VC2 的 ViewDidAppear 方法中检查了一个问题的选定索引的值。如果索引为 -1,我知道没有选择任何内容。有没有办法通过 ViewDidAppear 将其发送回 VC1? 【参考方案1】:在 VC1 中实现:
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool
if identifier == <your storyboard segue identifier>
给你的故事板segue一个标识符,然后你可以在VC1中进行检查,如果你不希望segue发生,则返回false。
【讨论】:
那么我应该在 VC1 和 VC2 中都有一个 shouldPerformSeguieWithIdentifier 吗?你能做到吗?我在 VC2 中使用了一个标识符。 您应该在 VC1 中进行检查。您可以在 VC2 中使用它,但它只有在您已经使用 VC2 之后才有用。 我在 VC1 中有多个 segue。它会知道要转到哪些视图吗? 是的,如果你覆盖它,每个 segue 都会调用它,如果你没有该标识符的任何代码,它就不会做任何事情。以上是关于Swift:如果条件不满足,则继续执行 segue的主要内容,如果未能解决你的问题,请参考以下文章