[英]Passing data between controllers ABC, from C to A
考虑三个不同的控制器 A、B 和 C,其中 A 是导航控制器中的初始控制器。
现在我推到 B,然后推到 C。
A --> B --> C
然后我想从C转到A。我怎么能用一个推和动画去那里。 我想方法是从导航堆栈中找到控制器 A 并调用popToController
方法。 如果有其他更好的方法,请告诉我。
现在的主要问题是如何从C --> A
传递数据。 如果它来自B --> A
我可以使用委托。 但是对于C --> A
什么委托可以做什么?
我确实有使用观察者、单例、反应模式的解决方法。 但我想知道是否可以使用更好的方法。
您可以通过多种方式来实现此功能。 一次可以从列表中获取 VC 并弹出到它。
let viewControllers: [UIViewController] = self.navigationController!.viewControllers ;
for aViewController in viewControllers {
if let controllerA = aViewController as? AViewController) {
controllerA.data = self.data
self.navigationController?.popToViewController(controllerA, animated: true);
}
}
你也可能对unwind segue感兴趣。 这里也是一个很好的例子。
您可以通过这种方法实现这一点,它将 100% 有效
for item in self.navigationController?.viewControllers ?? [UIViewController]() {
if item is FirstVC, let vc = item as? FirstVC {
vc.data = ThirdVC.data //3rd vc data assign to 1st vc
vc.callAnyMethodOfFirstVC()
self.navigationController?.popToViewController(item, animated: true)
}
}
用于从 C 传递数据 --> A 使用单例模式。 您要传递的任何数据都使用单例模式保存在变量中,然后使用
self.navigationController?.popToRootViewController(animated: true)
现在您可以在任何地方访问数据。 希望它的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.