![](/img/trans.png)
[英]IOS Swift - Passing data between view controllers using container view
[英]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.