【问题标题】:Communication between Controllers in iOS [duplicate]iOS中控制器之间的通信[重复]
【发布时间】:2018-06-04 03:18:51
【问题描述】:

上周我正在学习使用 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 开发生涯中会遇到这个问题:控制器之间通信的好的方式是什么

提前致谢。

【问题讨论】:

  • 您可以在prepareForSegue中获取对嵌入式视图控制器的引用

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


【解决方案1】:

ContainerView 只是一个 UIView。它没有任何嵌入式 ViewController 的参考。它在视图控制器之间创建父子关系。就像这里一样,MapViewController 是父母,RoutesPageViewController 是孩子。

现在,为了获得孩子的参考,您应该使用ViewControllerchildViewControllers 属性。它将返回一个子 ViewControllers 数组。

喜欢这里MapViewController

let routeVC : RoutesPageViewController? = self.childViewControllers.filter{$0 is RoutesPageViewController}.first

会给你RoutesPageViewController的参考。

【讨论】:

  • 例如loadView 是设置属性的好地方吗?
  • 没有。不在 loadView() 中。您可以在 MapViewController 的 viewDidLoad 中设置该属性。
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 2018-09-05
  • 2012-04-27
  • 2019-08-22
  • 2014-10-02
  • 2023-03-17
  • 1970-01-01
  • 2017-06-19
相关资源
最近更新 更多