我有两个VC:VC1和VC2.在VC1中,我有一个finish button
以编程方式制作的,result array
我想传递给VC2.
我知道如何在故事板中制作Segue,但是由于finish button
是以编程方式制作的,所以此刻我不能这样做.
如果我想使用segue传递结果数组,有没有办法以编程方式生成segue?如果这是不可能的,我应该只使用VC2 presentViewController
并设置一个委托传递result array
?
deh*_*len 28
你可以像在这个答案中提出的那样做: 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)
Run Code Online (Sandbox Code Playgroud)
编辑:
由于这个答案引起了一些关注,我想我会为你提供另一种更安全的方法.在上面的答案中,如果ViewController
带有"标识符"不是类型,应用程序将崩溃SecondViewController
.在Swift中,您可以使用可选绑定来防止此崩溃:
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)
Run Code Online (Sandbox Code Playgroud)
这样,ViewController
如果它是类型,则被推送SecondViewController
.如果无法SecondViewController
打印到打印的消息,则应用程序仍保持当前状态ViewController
.
您仍然可以通过从VC1拖动到VC2来在Interface Builder中创建segue - 只需从/向上拖动到VC顶部的黄色小圆圈即可.在IB中给这个segue一个唯一的名字,在你的finish
函数中你可以调用performSegueWithIdentifier:
,传递你的segue的名字,就是这样.在该prepareForSegue
方法中,您可以通过访问找出正在执行的segue segue.identifier
,如果它是有问题的segue,您可以获得指向segue.destinationViewController
并以此方式传递数据的指针.
归档时间: |
|
查看次数: |
26626 次 |
最近记录: |