xcode 8 swift: unwind segue 传输数据不工作

xcode 8 swift: unwind segue transfer data is not working

因此,从过去两天开始,我一直在尝试让 unwind segue 正常工作。我尝试观看并遵循几个不同的教程,none 成功了。我创建了 @IBAction override func unwind(for unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController) 但这从不执行任何代码。我放了一个简单的打印件并让它打印文本,但它从未打印过文本。我在第一个 View Controller 中创建了它,然后在第二个 View Controller 中创建了一个按钮,该按钮连接到 View Controller 顶部的 Exit 并 selected 展开操作并且它永远不会展开。我做错了什么或错过了什么?

到目前为止,我有 2 个视图:RaceViewController 和 SingleStatViewController

我将从 selecting RaceViewController 中的指定行开始,它们将以模态方式打开 SingleStatViewController。我在 SingleStatViewController 中有一个名为 dismissBtn 的按钮。当我单击按钮时,它会关闭 SingleStatViewContoller。我只需要它将一些数据传递回 RaceViewController。

因此,如果用户 selects table 中的 3 个单元格中的第 1 个(行是半兽人、半精灵和人类),它将打开 SingleStatViewController 并询问 select 1 stat(这些将是 6 个按钮(Str、Dex、Con、Int、Wis、Chr)当它们 select 按钮之一时它将 return 数据并更新 detailTextLabel。

我 select 人类然后我 select 海峡。当它返回到 RaceViewController 并将 detailTextLabel 中的文本更新为 +2 Str。

现在,这是我用来关闭的代码。我可以使用它来继续还是我真的需要执行放松:

@IBAction func dismissbtn(_ sender: Any)
{
    dismiss(animated: true, completion: nil)
}

您需要按如下方式执行unwind和发送数据:

@IBAction func unwindToRaceViewController(sender: UIStoryboardSegue) 
{
    if let sourceViewController = sender.sourceViewController
                            as? RaceViewController {
    stat = sourceViewController.stat
}

unwind segues as alternative to delegate

可以参考这篇文章

您还可以使用委托将数据传回之前的控制器。

好的,所以你有 vc A 和 vc B,这是你需要做的来使用 unwind segue:

  1. 在 vc A 中,创建一个 segue 函数,例如。 @IBAction func unwind(segue: UIStoryboardSegue)

  2. 在vc B中,编写调用self.performSegueWithIdentifier("unwind", sender: self)的代码(假设标识符和函数名相同——在你的dismissbtn中调用)

  3. 在Storyboard的vcB中,看上面,会有一个黄色按钮和2个橙色按钮,按住黄色按钮拖到橙色退出按钮,选择您在 vc A 中创建的操作,如前所述为其指定一个标识符

  4. unwind func中,其余的和普通segue一样,你传数据前向,只是把destination改成source,你必须出示vc B 来自 vc A,否则使用委托