【问题标题】:Swift 3.0 Using Segue to Pass Information Between View ControllersSwift 3.0 使用 Segue 在视图控制器之间传递信息
【发布时间】:2017-05-25 02:14:32
【问题描述】:

我正在尝试将文本值从一个 VC(称为 secondVC)传递到另一个 VC(firstVC)。 secondVC 中的信息将指示 firstVC 中文本字段的文本值。我曾尝试使用文档来解决这个问题,但我一定是非常困惑或其他问题 - 我不知道是哪个。

在我的第二个VC中:

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if(segue.identifier == "saveSegue") {

        let destinationVC = segue.destination as! firstVC

        destinationVC.addressTextField.text = searchBar.text
    }
}


@IBAction func savePressed(_ sender: Any) {


    performSegue(withIdentifier: "saveSegue", sender: self)
}

回到 firstVC 后,textField 未按预期填充 searchBar 文本。 (searchBar 文本不为零) 据我了解,当在 secondVC 中选择按钮并调用 performSegue 时,它​​也会调用 prepareForSegue 并设置 addressTextField.text 值,同时继续返回 firstVC。我不确定我的逻辑是否正确。

【问题讨论】:

  • 你在使用navigationController吗?您确定您实际上是在使用 firstVC 而不仅仅是将您的 secondVC 从 naviationController 堆栈中弹出?在prepareForSegue 中放置一个断点,看看它是否真的被调用了。
  • 我没有使用navigationController - 只有故事板segues。我在 prepareForSegue 中放了一个断点,它没有被调用。这两者有关系吗?
  • 通常当你“返回”到前一个 viewController 时,你实际上并没有执行 segue。您要么关闭模态视图 segue,要么从 viewController 堆栈中弹出一个视图(如果您使用的是 navigationController)。传回数据有点复杂,我推荐的方法是使用委托。好消息here
  • 您是否真的将断点放在if-block 之外以检查是否调用了prepareForSegue?或者您是否将断点放在您的if-block 中?只是要求确定。
  • @nayem 我只是把它放在 if 块的外面和里面,都没有被调用

标签: swift segue uistoryboardsegue


【解决方案1】:

在您的 FirstViewController 中

    @IBAction func dismissSearchVC(_ sender: UIStoryboardSegue) {
      let sourceVC = sender.source as! viewController2
      addressTextField.text = sourceVC.searchBar.text
}

在你的 secondViewController 中

var searchedText = ""


@IBAction func savePressed(_ sender: Any) {
    performSegue(withIdentifier: "saveSegue", sender: self)
}

现在连接您的 viewController 以退出顶部并将标识符添加到该 segue 作为 saveSegue 并从下拉列表中选择 dismissSearchVC

然后从这里选择你的转场

现在选择“unwind segue to DismissSearchVC”并在属性检查器中添加标识符..

【讨论】:

  • 我的 prepareForSegue 甚至没有被调用所以这不起作用
  • 实际上您正在执行 pop 或关闭 viewController 所以它没有被调用...等等我会编辑我的答案
  • addressTextField在firstViewController所以在secondViewController viewDidLoad,addressTextField.text = searchedText会报错
  • 如何调用手动segue,saveSegue?它没有给我任何命名它的选项。还是我只是添加一个常规的 segue,然后调用 saveSegue?我不确定你的意思
  • 当我连接 viewController 以退出它时,它只会给我一个dismissVC 的下拉菜单,并且它没有给我一个选项来给它一个标识符。我怎么称呼它 saveSegue?
【解决方案2】:

我怀疑您从一个视图控制器到另一个视图控制器的转换不是因为 segue 而发生的,而是因为按钮的连接而发生的。

删除您从UIButton 连接到AnotherViewControllersegue

现在从包含ViewController 的按钮添加一个segueAnotherViewController。 (不是从UIButtonAnotherViewController,而是从ViewControllerAnotherViewController)。并给 segue 你预期的标识符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多