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

Posted

技术标签:

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

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

BCD

的数据源

我想直接从 A

更新 CD 中的标签

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

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

的 DataSource 方法中动态创建的

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

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

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

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

【问题讨论】:

我使用了静态实例,它对我很有用。 【参考方案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

访问它们的变量和函数

【讨论】:

以上是关于Swift:如何将数据传递给嵌入在 ContainerView 中的 PageViewController?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据传递给嵌套控制器(UIContainerView)?

Swift/XCode - 为啥我不能在按下 tableViewCell 时将数据传递给下一个视图控制器?

如何快速将数据传递给其他 UIViewcontroller

Swift segue 不会将数据传递给旧的 ViewController

SwiftUI 如何将数据传递给 ObservedObject 函数

iOS Swift:查询完成后将数据传递给其他 VC 的最佳方式