2016-12-26 69 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