首页 文章

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

提问于
浏览
1

当我从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 via

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 回答

  • 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)}
    

相关问题