簡體   English   中英

將數據傳遞給不是之前 VC 的 VC

[英]Pass data to VC that is not the previous VC

當我從 VC1 轉到 VC2 時,如果 VC2 被解散,我可以通過在 VC2 中設置協議並讓 VC1 符合它來輕松地將數據傳回 VC1。 但是,我想做類似的事情,但有以下區別

當我從 VC1-> NavVC->VC2-> VC3 去時。 當 VC3 被解散時,會顯示 VC1。 我希望能夠將數據傳回 VC1 並在 VC1 中啟動一些功能。 例如,我有一張圖片要在 VC3 中上傳。 一旦 VC3 被解雇,我希望在 VC1 中有一個函數,例如以下函數,其中圖像是來自 VC3 的數據

func uploadInitiate(image: UIImage) {}

三個VC的關系

VC1 是普通的 VC。 它通過

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 的數據啟動上傳會很好(這樣我可以在導航欄下有一個進度條或在那里顯示任何警告)

您可以在類似情況下應用多種模式。 我將采用代表團(推薦)示例。 想象一下,您有 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)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM