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:C 和 D。
B 是 C 和 D
的数据源我想直接从 A
更新 C 和 D 中的标签我阅读了this 关于在主视图控制器和容器之间传递数据的答案。
但是,在我的情况下,我无法继续引用 A 中的控制器,因为它们是在 B
的 DataSource 方法中动态创建的我是否应该保持对 B 的引用并通过委托传递数据,然后将数据从 B 传递到 C 和 D 再次使用委托?
我应该如何解决这样的问题,有没有更好的设计方法?
为了让您更好地了解我想要实现的目标,请查看来自Runkeeper
app 的截图
距离和步速标签都嵌入到带有页面视图控制器的容器视图中。
【问题讨论】:
我使用了静态实例,它对我很有用。 【参考方案1】:解决方案 1:
我的解决方案是丢弃 B 并让 A 成为数据源。
我会编写一个 Swift 扩展(如果您使用的是 Swift)并将所有数据源方法放入其中。那么A就可以正常访问C和D了。
解决方案 2:
如果您不能删除 B,那么我将创建一个模型类,其中包含 Cs 和 Ds 标签的数据。
这个模型类可以在里面:
A) 符合 Singleton 模式的 DataManager
B) 静态类
C) UserDefaults、DataBase(仅供参考)
C 和 D 将通过观察者模式 (NSNotificationCenter
) 在模型更改中收到警报
【讨论】:
【参考方案2】:在我自己对这个问题进行头脑风暴时,我发现我忽略了最直接的解决方案:
1) 在 A
中创建 C 和 D 实例2) 使用prepareForSegue
方法将它们传递给B
3) 在B中根据VC分配他们
4) 瞧,我可以直接从 A
访问它们的变量和函数【讨论】:
以上是关于Swift:如何将数据传递给嵌入在 ContainerView 中的 PageViewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据传递给嵌套控制器(UIContainerView)?
Swift/XCode - 为啥我不能在按下 tableViewCell 时将数据传递给下一个视图控制器?
Swift segue 不会将数据传递给旧的 ViewController