[英]How to navigate and pass data between UIViewControllers whose layout resembles a fork?
组织上级控制器的数据管理器或使用核心数据。
如果将数据保留在父控制器中,请使用此处所述的依赖项注入
这是您的情况的示例:
var dataFromC = "" // or nil
var dataFromB = "" // or nil
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "B",
let viewController = segue.destinationViewController as? BViewController {
viewController.dataFromC = self.dataFromC
// declare method in BViewController
// var method : ((String) -> ())? = nil
viewController.method = {[weak self] valueFromB in
self?.dataFromB = valueFromB
}
}
if segue.identifier == "C",
let viewController = segue.destinationViewController as? CViewController {
viewController.dataFromB = self.dataFromB
// declare method in CViewController
// var method : ((String) -> ())? = nil
viewController.method = {[weak self] valueFromC in
self?.dataFromC = valueFromC
}
}
}
如果要从BViewController
将值传递给父控制器,请使用self.method("yourValueFromB")
在其中更改值。 对于CViewController
使用相同的方法。
通常,B应该在委托协议模式的帮助下将数据发送回其原始视图控制器A。 然后,A应该能够在委托方法实现中决定从B接收什么数据以及将数据发送到哪里(在这种情况下为C)。
这样,您的代码看起来更有条理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.