在Swift中以编程方式进行Segue

我有两个VC:VC1和VC2。 在VC1中,我有一个finish button ,我编程和我想要传递给VC2的result array

我知道如何在Storyboard中制作Segue,但是现在我无法做到这一点,因为finish button是以编程方式制作的。

如果我想使用segue传递结果数组,有没有一种方法使编程的segue? 如果这是不可能的,我应该只使用presentViewController呈现VC2并设置一个委托来传递result array

你可以像这个答案中的build议那样做: 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不是SecondViewControllertypes,应用程序将会崩溃。 在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) 

如果它是SecondViewControllertypes的话, ViewController被推送。 如果不能被输出到SecondViewController则会打印一条消息,并且应用程序保留在当前ViewController

你仍然可以在界面生成器中通过从VC1拖动到VC2来创build轮廓 – 只需拖放到VC顶部的小黄圈即可。 在IB中为这个segue命名一个独特的名字,在finish函数中,你可以调用performSegueWithIdentifier:传入你的segue的名字,就是这样。 在prepareForSegue方法中,您可以通过访问segue.identifier来找出正在执行哪个segue,如果这是正在segue.identifier的segue,则可以获取指向segue.destinationViewController的指针,并以此方式传递数据。