当我从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 回答
您可以在类似情况下应用多种模式 . 我将与代表团(推荐)的例子一起去 . 想象一下,你有VC1->以模态方式呈现UINavigationController作为根控制器,从那里VC2将VC3推送到堆栈 . 您必须定义将在解除VC3的方式上调用的多个协议
然后存储属性:
当您从VC2推送委托时,将委托设置为VC3并符合您在VC2中定义的协议 . 将相同的模式一直应用回VC1,你已经多次通过协议,你可以开始上传任务,你应该忽略模态提供的导航控制器: