我有兩個VC:VC1和VC2。 在VC1中,我有一個finish button
,這是我編程創建的,我想要傳遞給一個result array
。在Swift中編程Segue
我知道如何使故事板中的Segue,但我不能這樣做,因爲finish button
是以編程方式製作的。
如果我想使用segue傳遞結果數組,有沒有一種方法讓編程的segue?如果這是不可能的,我應該使用presentViewController
來呈現VC2,並設置一個代表通過result array
?
我有兩個VC:VC1和VC2。 在VC1中,我有一個finish button
,這是我編程創建的,我想要傳遞給一個result array
。在Swift中編程Segue
我知道如何使故事板中的Segue,但我不能這樣做,因爲finish button
是以編程方式製作的。
如果我想使用segue傳遞結果數組,有沒有一種方法讓編程的segue?如果這是不可能的,我應該使用presentViewController
來呈現VC2,並設置一個代表通過result array
?
你可以這樣做: InstantiateViewControllerWithIdentifier。
此外,我爲您提供了在Swift中重寫的鏈接代碼的代碼,因爲鏈接中的答案最初是用Objective-C編寫的。
let vc = UIStoryboard(name:"Main", bundle:nil).instantiateViewControllerWithIdentifier("identifier") as! SecondViewController
vc.resultsArray = self.resultsArray
self.navigationController?.pushViewController(vc, animated:true)
編輯:
由於這個答案得出了一些關注,我想我爲你提供另一個更加故障安全的方式。在上述答案中,如果ViewController
與「標識符」不是SecondViewController
類型,則應用程序將崩潰。在斯威夫特您可以通過使用可選的結合防止這種崩潰:
guard let vc = UIStoryboard(name:"Main", bundle:nil).instantiateViewControllerWithIdentifier("identifier") as? SecondViewController else {
print("Could not instantiate view controller with identifier of type SecondViewController")
return
}
vc.resultsArray = self.resultsArray
self.navigationController?.pushViewController(vc, animated:true)
這樣,如果它是SecondViewController
類型的ViewController
推。如果無法輸出到SecondViewController
,則會打印一條消息,並且該應用程序保留在當前的ViewController
上。
由於OP正在詢問如何從按鈕動作創建segues,因此按照@AdrianB的建議,創建一個名爲'UIViewController'的'UIViewController'繼承並使用performSegueWithIdentifier調用它,這看起來是一個更好的解決方案。 –
@DuncanC提出了一個很好的觀點,但德倫的解決方案也在努力:)我學會了兩種不同的方式。 – Kahsn
嗨,這工作對我來說,但現在當我點擊取消導航,它不起作用,任何想法可能是錯誤的? –
您仍然可以在界面生成器中通過從VC1拖動到VC2來創建細分 - 只需將鼠標拖放到VC頂部的小黃圈即可。在IB中給這個segue一個唯一的名字,並且在你的finish
函數中你可以調用performSegueWithIdentifier:
,傳入你的segue的名字,就是這樣。在prepareForSegue
方法中,您可以通過訪問segue.identifier
找出正在執行哪個分析,如果是問題分析,則可以獲得指向segue.destinationViewController
的指針並以此方式傳遞數據。
您可以在VC1到VC2的接口生成器中創建一個名爲segue的名稱,然後從綁定到該按鈕的操作中調用performSegueWithIdentifier。然後,在'prepareForSegue'中,輸入你正在使用的segue的'if'語句,抓住你從VC1傳遞的任何內容,將它分配到VC2和BAM上......完成了。 – Adrian
阿德里安,你應該發佈這個答案,以便OP可以接受它。這是OP問題的正確答案。 –