【问题标题】:Swift: Keep segue from executing if condition not metSwift:如果条件不满足,则继续执行 segue
【发布时间】: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?

标签: ios swift segue


【解决方案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 都会调用它,如果你没有该标识符的任何代码,它就不会做任何事情。
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2013-09-09
  • 2022-06-15
  • 2019-02-27
相关资源
最近更新 更多