【问题标题】:Is it possible to add the same view to two different view controllers?是否可以将相同的视图添加到两个不同的视图控制器?
【发布时间】:2017-10-24 06:01:37
【问题描述】:

我收到以下错误消息:

一个视图最多只能与一个视图控制器关联 时间!

是否可以将相同的视图添加到两个不同的视图控制器?

我想将一个 Google 地图实例添加到选项卡视图控制器。

我在故事板中使用 swift4。

【问题讨论】:

  • 您可以创建一个通用视图的 xib 文件并将其添加到您想要的任意数量的控制器中。
  • 我将 swift4 与情节提要一起使用 - 对于我添加的每个控制器 - 我还获得了一个新的视图实例。
  • 当然。每次将视图添加到控制器时,都会创建一个新的视图实例。你想要什么我不明白。请清楚说明您的要求。
  • 我正在使用来自 Google Maps iOS SDK 的 mapView。而且我只想要我的选项卡视图控制器中的一个 mapView 实例。这样您就可以在不同的选项卡中看到相同的地图实例。
  • 创建一个 .XIB,您可以根据需要在尽可能多的 viewControllers 中使用它,您应该对 .XIB 进行研究,因为它们对于某些事情非常方便

标签: ios swift google-maps google-maps-sdk-ios swift4


【解决方案1】:

如果它是一个典型的视图,那么您应该创建一个 XIB 并将它的一个新实例添加到每个视图。 由于您使用的是 Google Maps SDK 中的 GMSMapView,并且您希望在多个选项卡中拥有相同的实例,因此方法会有所不同。

您可以:

  1. 新建实例,相同参数: 在每个选项卡中创建一个新实例,并将参数设置为与其他选项卡相同。
  2. 移动单个实例: 创建 GMSMapView 的实例。将其存储在共享属性中。使用addSubview() 移动它。基本上在新标签中使用addSubview() 将其从旧标签中删除并添加到新标签中。

【讨论】:

  • 感谢您的回答!你的第二个建议正是我想做的。如果我执行addSubview()GMSMapView 会与之前的 Tab 分离吗?
  • 这就是它的美妙之处,Cocoa 不支持在多个位置使用相同的UIView,因此addSubview() 会自动将其从之前的位置删除并添加到新位置。我对 YouTube Video View 使用了类似的东西。为我工作。
【解决方案2】:

UIView 只能与另一个视图关联,因为它只能有一个父视图,该父视图设置为superView 属性。此外,在此视图上设置了诸如布局之类的东西,并且与它的超级视图相关,因此在多个控制器中使用相同的视图是没有意义的。 最好的解决方案是继承 UIView,然后将自定义类的新实例添加到每个 ViewController

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多