2016-12-26 46 views
0

所以我一直在努力让过去两天的工作顺利进行。我曾尝试观看并遵循几个不同的教程,但都没有成功。我创建了@IBAction override func unwind(for unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController),但是这从不执行任何代码。我把一个简单的打印,并打印文本,它从来没有打印文本。我在第一个View Controller中创建了它,然后在第二个View Controller中创建了一个按钮,我连接到View Controller顶部的Exit并选择了展开操作,并且它从不展开。我做错了什么或失踪?xcode 8 swift:展开segue传输数据不起作用

因此,这里是我到目前为止,我有2个观点:RaceViewController & SingleStatViewController

我将在RaceViewController选择指定的行开始,他们将有模式打开SingleStatViewController。我在SingleStatViewController中有一个名为dismissBtn的按钮。当我点击按钮时,它会关闭SingleStatViewContoller。我只需要它将一些数据传回给RaceViewController。因此,如果用户选择表中的3个单元中的一个(行是半兽人,半精灵和人类),它将打开SingleStatViewController并要求选择1个统计(这些将是6个按钮(Str, Dex,Con,Int,Wis,Chr)当他们选择其中一个按钮时,它将返回数据并更新detailTextLabel

我选择Human然后我选择Str,当它返回到RaceViewController并且它更新textTextLabel中的文字改为+2 Str。

现在,这是我用来解雇的代码,我可以用它继续还是需要执行展开:

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

回答

1

您需要执行的展开和发送数据如下:

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

你可以参考这篇文章unwind segues as alternative to delegate

你也可以使用委托来传递数据回以前的控制器。

0

好了,你有一个VC和VC B,这是你需要做的,用开卷赛格瑞什么:

  1. 在VC A,创建一个赛格瑞的功能,例如。 @IBAction func unwind(segue: UIStoryboardSegue)

  2. 在VC B,编写调用self.performSegueWithIdentifier("unwind", sender: self)代码(假定标识符和函数的名称是相同的 - 你dismissbtn于召本)

  3. 在故事板在VC B,看在它之上,会出现一个黄色的按钮和2个橙色按钮,按住黄色按钮并拖动到Exit橙色按钮,选择你在vc A中创建的动作,给它一个标识符如上所述

  4. unwind func中,其余部分与正常的赛格一样,当你传递数据时,只需更改即可3210 source,你必须从VC的礼物VC B,否则则使用委托

+0

步骤4即时猜测我有这样的事情 '让unwindData = segue.source作为! RaceViewController' – Micheal

+0

所以我按照你的步骤。第4步我有点迷路。对于这一切,我仍然是新手,只是在过去的三周里一直在努力。到目前为止,我已经完成了第3步。当我运行该应用程序,然后单击我的dismissBtn时,它会给我和错误:它会转到AppDelegate并强调“类AppDelegate:UIResponder,UIApplicationDelegate {它说线程1:信号SIGABRT。我不知道我错过了什么。我只能猜测,因为我的展开功能没有任何东西。 我收到警告不支持的配置。直接从视图控制器使用的分段具有标识符。 – Micheal

+0

@MIcheal你应该给你的segue标识符后,你拖动它,它不应该崩溃,因为它没有任何功能,你有错误应该因为你错过了一些步骤或错误的标识符,也在步骤4你应该知道你如何执行一个forward segue,只需将'destinationViewController'改为'sourceViewController'来获得vc B,那么你就可以得到它的属性 – Tj3n