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:
在 vc A 中,创建一个 segue 函数,例如。 @IBAction func unwind(segue: UIStoryboardSegue)
在vc B中,编写调用self.performSegueWithIdentifier("unwind", sender: self)
的代码(假设标识符和函数名相同——在你的dismissbtn
中调用)
在Storyboard的vcB中,看上面,会有一个黄色按钮和2个橙色按钮,按住黄色按钮拖到橙色退出按钮,选择您在 vc A 中创建的操作,如前所述为其指定一个标识符
在unwind
func中,其余的和普通segue一样,你传数据前向,只是把destination
改成source
,你必须出示vc B 来自 vc A,否则使用委托
因此,从过去两天开始,我一直在尝试让 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:
在 vc A 中,创建一个 segue 函数,例如。
@IBAction func unwind(segue: UIStoryboardSegue)
在vc B中,编写调用
self.performSegueWithIdentifier("unwind", sender: self)
的代码(假设标识符和函数名相同——在你的dismissbtn
中调用)在Storyboard的vcB中,看上面,会有一个黄色按钮和2个橙色按钮,按住黄色按钮拖到橙色退出按钮,选择您在 vc A 中创建的操作,如前所述为其指定一个标识符
在
unwind
func中,其余的和普通segue一样,你传数据前向,只是把destination
改成source
,你必须出示vc B 来自 vc A,否则使用委托