Swift: 如何将数据传递给嵌入在ContainerView 中的PageViewController?

Swift: How to pass data to PageViewController which is embedded in ContainerView?

VC A 有一个容器视图 VC B 有两个 VC 的:CD

BCD

的数据源

我想直接从 A[=14 更新 CD 中的标签=]

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

但是,在我的例子中,我无法保留对 A 中控制器的引用,因为它们是在 B 中的 DataSource 方法中动态创建的

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

这样的问题应该怎么处理,有没有更好的设计方法?

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

的屏幕截图

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

解决方案 1:

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

我会写一个 Swift 扩展(如果您使用的是 Swift),然后将所有数据源方法放入其中。然后A可以正常访问C & D

解决方案 2:

如果你不能删除 B 那么我会制作一个模型 Class 其中包含 Cs 的数据和 Ds 个标签。

此款class可入内:

A) 符合单例模式的DataManager

B) 静态 class

C) UserDefaults,数据库(仅供思考)

CD 将通过观察者模式 (NSNotificationCenter)

在模型更改中收到警报

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

1) 在 A

中创建 CD 实例

2) 使用prepareForSegue方法

将它们传递给B

3) 在 B 中将它们分配给根据 VC 的

4) 瞧,我可以直接从 A

访问它们的变量和函数