【问题标题】:Swift: How to pass data to PageViewController which is embedded in ContainerView?Swift:如何将数据传递给嵌入在 ContainerView 中的 PageViewController?
【发布时间】:2016-09-29 13:05:22
【问题描述】:

VC A 有一个容器视图,其中 VC B 有两个 VC:CD

BCD

的数据源

我想直接从 A

更新 CD 中的标签

我阅读了this 关于在主视图控制器和容器之间传递数据的答案。

但是,在我的情况下,我无法继续引用 A 中的控制器,因为它们是在 B

的 DataSource 方法中动态创建的

我是否应该保持对 B 的引用并通过委托传递数据,然后将数据从 B 传递到 CD 再次使用委托?

我应该如何解决这样的问题,有没有更好的设计方法?

为了让您更好地了解我想要实现的目标,请查看来自Runkeeper app 的截图

距离和步速标签都嵌入到带有页面视图控制器的容器视图中。

【问题讨论】:

  • 我使用了静态实例,它对我很有用。

标签: ios swift uipageviewcontroller


【解决方案1】:

解决方案 1:

我的解决方案是丢弃 B 并让 A 成为数据源。

我会编写一个 Swift 扩展(如果您使用的是 Swift)并将所有数据源方法放入其中。那么A就可以正常访问CD了。

解决方案 2:

如果您不能删除 B,那么我将创建一个模型类,其中包含 Cs 和 Ds 标签的数据。

这个模型类可以在里面:

A) 符合 Singleton 模式的 DataManager

B) 静态类

C) UserDefaults、DataBase(仅供参考)

CD 将通过观察者模式 (NSNotificationCenter) 在模型更改中收到警报

【讨论】:

    【解决方案2】:

    在我自己对这个问题进行头脑风暴时,我发现我忽略了最直接的解决方案:

    1) 在 A

    中创建 CD 实例

    2) 使用prepareForSegue 方法将它们传递给B

    3) 在B中根据VC分配他们

    4) 瞧,我可以直接从 A

    访问它们的变量和函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多