在Swift中以编程方式进行Segue

Kah*_*hsn 17 ios segue swift

我有两个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.


cre*_*eak 8

您仍然可以通过从VC1拖动到VC2来在Interface Builder中创建segue - 只需从/向上拖动到VC顶部的黄色小圆圈即可.在IB中给这个segue一个唯一的名字,在你的finish函数中你可以调用performSegueWithIdentifier:,传递你的segue的名字,就是这样.在该prepareForSegue方法中,您可以通过访问找出正在执行的segue segue.identifier,如果它是有问题的segue,您可以获得指向segue.destinationViewController并以此方式传递数据的指针.