gpt4 book ai didi

iOS/swift 3 : Passing data backwards between non consecutive View Controllers

转载 作者:行者123 更新时间:2023-11-30 12:28:17 24 4
gpt4 key购买 nike

我知道有向后传递数据的答案,但它们适用于连续 View Controller 。我有 3 个 View Controller 和一个导航 Controller 。所有segue 都是“show segue”。我想将数据从 VC3 传递到 VC1。我正在尝试使用委托(delegate),但陷入困境:

    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 个 segues。我们将不胜感激您的帮助。

最佳答案

您可以使用展开转场,如 Apple Tech Note 所示.

在 Storyboard中,创建一个 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 之间拥有任意数量的 View Controller ,并通过简单的展开转场返回到它。

关于iOS/swift 3 : Passing data backwards between non consecutive View Controllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43903430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com