簡體   English   中英

iOS / Swift 3:在不連續的View Controller之間向后傳遞數據

[英]iOS/Swift 3: Passing data backwards between non consecutive View Controllers

我知道有向后傳遞數據的答案,但它們適用於連續的視圖控制器。 我有3個視圖控制器和一個導航控制器。 所有的segues都是“ show segue”。 我想將數據從VC3傳遞到VC1。 我正在嘗試使用委托,但被卡住:

    protocol Delegate:class {
        func getCityId(with id: String)
    }


    Class VC3:UIViewController{
     weak var delegate: Delegate?
    let id:String?

     func passDataBackwards() {

            delegate?.getCityId(with: self.id!)

    }

  }  
    Class VC1:UIViewController, Delegate{
     func getCityId(with id: String) {
            print ("id from search: \(id)")

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc3 = (segue.destination as! VC3)
          vc3.delegate = self
       }
   }

我的問題是我在源和目的地之間有2個問題。 您的幫助將不勝感激。

您可以按照本Apple Tech Note中的說明使用輕松的序列。

在情節提要中,按照技術說明中的說明創建一個Unwind segue,並為其指定一個標識符,例如“ unwindToVC1”

在VC3中,創建一個屬性來存儲所選值,並在表的didSelectRowAt函數中使用performSegue來調用它,首先將所選值存儲在該屬性中:

class VC3: UIViewController {

   var selectedValue: YourValueType?

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
       self.selectedValue = myData[indexPath.row]
       self.performSegue(withIdentifier: "unwindToVC1", sender: self)
    }
}

VC1創建一個展開動作方法並訪問該屬性

class VC1: UIViewController {

    @IBAction func unwind(sender: UIStoryboardSegue) {
        if let sourceVC = sender.sourceViewController as? VC3 {
            if let selectedValue = sourceVC.selectedValue {
                // Do something with the selected value
            }
        }
    }
}

現在,您可以在當前VC和VC1之間擁有任意數量的視圖控制器,並通過簡單的放松方式返回到視圖控制器。

暫無
暫無

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

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