我上周正在使用Obejctive-C学习iOS开发,我无法弄清楚如何在控制器之间进行通信。 这是我的故事板:
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开发生涯中遇到这个问题:控制器之间通信的良好方式是什么?
提前致谢。
答案 0 :(得分:1)
ContainerView只是一个UIView。它没有嵌入式ViewController的任何参考。它在视图控制器之间创建父子关系。与此处一样,MapViewController
是父级,RoutesPageViewController
是小孩。
现在,要获得孩子的参考,您应该使用childViewControllers
的{{1}}属性。它将返回一个子ViewControllers数组。
就像ViewController
MapViewController
将为您提供let routeVC : RoutesPageViewController? = self.childViewControllers.filter{$0 is RoutesPageViewController}.first
。