将数据传递给不是以前VC的VC

时间:2016-09-15 15:00:08

标签: ios swift

当我从VC1转到VC2时,如果VC2被解除,我可以通过在VC2中设置protocal并让VC1符合它来轻松地将数据传回VC1。我想做类似的事情,但有以下差异

当我离开VC1-> NavVC-> VC2-> VC3。当VC3被解雇时,显示VC1。我希望能够将数据传回VC1并在VC1中启动某些功能。例如,我有一个要在VC3中上传的图像。一旦VC3被解雇,我希望在VC1中有一个功能,例如以下功能,其中图像是来自VC3的数据

func uploadInitiate(image: UIImage) {}

三个VC的关系

VC1是正常的VC。它通过

呈现VC2
let navController = UINavigationController.init(rootViewController: VC2)
self.navigationController?.presentViewController(navController, animated: true, completion: nil)

VC2是来自cocoapods的定制FusumaCamera照片选取器。 选择图像后,我将使用所选图像通过

转到VC3
self.navigationController!.pushViewController(postVC, animated: true)

在VC3,我允许用户与图像交互并发表评论,然后按下按钮上传到服务器。我认为按下按钮后立即关闭VC会很好,并允许VC1使用来自VC3的数据启动上传(这样我可以在导航栏下方有一个进度条或显示任何警告)

1 个答案:

答案 0 :(得分:1)

您可以在类似情况下应用多种模式。我将与代表团(推荐)的例子一起去。想象一下你有VC1-> 它以模态方式呈现UINavigationController作为根控制器,从那里VC2将VC3推送到堆栈。您必须定义将在解除VC3的方式上调用的多个协议

protocol DismissVCDelegate : class {
    func dismissViewAndStartUpload(shouldUpload: Bool)
}

然后存储属性:

weak var delegate: DismissVCDelegate!

当您从VC2推送委托时,将委托时间设置为VC3并符合您在VC2中定义的协议。 将相同的模式一直应用回VC1,你已经多次通过协议,你可以开始上传任务,你应该忽略模态提供的导航控制器:

func dismissViewAndStartUpload(shouldUpload: Bool) {
     self.presentedViewController.dismissViewControllerAnimated(true, completion: nil)}