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的主要内容,如果未能解决你的问题,请参考以下文章

Swift performSegue 未执行 [重复]

for循环

for 循环与嵌套

java中三种循环的区别

如何快速执行条件segue操作?

Swift之:断言(Assertions)