在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
不是SecondViewController
types,应用程序将会崩溃。 在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)
如果它是SecondViewController
types的话, ViewController
被推送。 如果不能被输出到SecondViewController
则会打印一条消息,并且应用程序保留在当前ViewController
。
你仍然可以在界面生成器中通过从VC1拖动到VC2来创build轮廓 – 只需拖放到VC顶部的小黄圈即可。 在IB中为这个segue命名一个独特的名字,在finish
函数中,你可以调用performSegueWithIdentifier:
传入你的segue的名字,就是这样。 在prepareForSegue
方法中,您可以通过访问segue.identifier
来找出正在执行哪个segue,如果这是正在segue.identifier
的segue,则可以获取指向segue.destinationViewController
的指针,并以此方式传递数据。
- 如何获得AFNetworking 2.0的下载进度?
- OpenGL EXC_BAD_ACCESS在Swift中调用glDrawElements时,不在Objective-C中调用
- NSCalendar.components()。分钟返回不一致的值
- 如何确定一个数组是否包含Swift中另一个数组的所有元素?
- GCM中的Swift Bundle ID错误
- 在Xcode 6中显示segue将视图控制器作为iOS 7中的一个模式呈现
- 如何使用由Swift编写的Xcode中的TabBarControllerpipe理的ViewControllers处理iOS应用程序的静态QuickAction
- 使用Alamofire在iOS Swift中使用MultipartFormData发送POST参数
- 从本地video快速创build缩略图