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

Ios 在控制器ABC之间传递数据,从C到A,ios,swift,xcode,Ios,Swift,Xcode,考虑三个不同的控制器A、B和C,其中A是导航控制器中的初始控制器 现在我推到B,然后推到C A --> B --> C 然后我想从C转到A。我如何通过一次推送和动画达到这一点。我想方法是从导航堆栈中找到控制器A并调用popToController方法。如果有其他更好的方法,请告诉我 现在主要的问题是如何从C-->A传递数据。 如果它来自B-->A我可以使用委托。但是对于C-->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);
        }
    }
你也可能对它感兴趣。这也是一个很好的例子。

对于从C-->传递数据,请使用单例模式。任何要传递的数据都可以使用单例模式保存在变量中,然后使用

 self.navigationController?.popToRootViewController(animated: true)
现在,您可以在需要的地方访问数据。 希望能有所帮助

您可以通过这种方法实现这一点,它将100%起作用


self.navigationController?.popToRootViewController(动画:true)如果希望通过c->a中的委托传递数据,则可以创建两个协议:一个从c->b传递数据,另一个从b->a传递数据。为什么?因为你的A有B的参考,而不是C的参考(A在推B);因此,您不能直接从c->调用委托,因为这是为了解绑到您的A视图控制器。我的实际问题是关于传递数据。我知道这个方法可以跳到控制器A。看一看展开序列。我想不使用展开序列来做。如果你传递A->B然后B->C的委托引用会怎么样?你能举个例子说明我怎么做吗?不,Singleton真的不是为此而设计的。那么什么适合传递数据@CZ54您可以使用委托模式,也可以查看NavigationController堆栈,如上所述。如果A之后你再去C怎么办?你被你的单身汉绊倒了:)我怎么能在A之后再去C时绊倒@CZ54单例将包含旧值
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)
        }
    }