繁体   English   中英

在控制器 ABC 之间传递数据,从 C 到 A

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM