iOS中控制器之间的通信

时间:2017-12-21 12:32:21

标签: ios objective-c model-view-controller

我上周正在使用Obejctive-C学习iOS开发,我无法弄清楚如何在控制器之间进行通信。 这是我的故事板: enter image description here

Routes Page View Controller是一个嵌入在容器视图中的PageViewController

MapViewController我想访问RoutesPageViewController以调用某些方法。 但是当我在MapViewController中为容器视图创建一个插座并将其转换为RoutesPageViewController并调用方法时,它会抛出此错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView items]: unrecognized selector sent to instance 0x7ff60551a300'

这是逻辑,因为它不是RoutesPageViewController

所以我的问题是,因为我将在进一步的iOS开发生涯中遇到这个问题:控制器之间通信的良好方式是什么

提前致谢。

1 个答案:

答案 0 :(得分:1)

ContainerView只是一个UIView。它没有嵌入式ViewController的任何参考。它在视图控制器之间创建父子关系。与此处一样,MapViewController是父级,RoutesPageViewController是小孩。

现在,要获得孩子的参考,您应该使用childViewControllers的{​​{1}}属性。它将返回一个子ViewControllers数组。

就像ViewController

一样
MapViewController

将为您提供let routeVC : RoutesPageViewController? = self.childViewControllers.filter{$0 is RoutesPageViewController}.first

的参考