VC A有一个带有VC B的容器视图,它有两个VC:C和D.
B是C和D的数据源
我想直接从A更新C和D中的标签
我读了关于在Master View Controller和Container之间传递数据的this答案。
但是,在我的情况下,我无法继续引用A中的控制器,因为它们是在B中的DataSource方法内动态创建的
我应该继续引用B并通过委托传递数据,然后再使用委托将数据从B传递到C和D吗?
我应该如何处理这样的问题,有没有更好的方法来设计呢?
为了让您更好地了解我想要实现的目标,请查看Runkeeper
应用程序的截图
距离和起搏标签都嵌入到容器视图中,并带有页面视图控制器。
解决方案1:
我的解决方案是抛弃B并使A成为数据源。
我会写一个Swift扩展(如果你使用Swift)并且只是将所有数据源方法放在其中。然后A可以正常访问C&D。
解决方案2:
如果你不能删除B,那么我会创建一个具有Cs和Ds标签数据的Model Class。
这个模型类可以在里面:
A)符合Singleton模式的DataManager
B)静态类
C)UserDefaults,DataBase(只是值得深思)
C和D将通过观察者模式(NSNotificationCenter
)在模型更改中发出警报
在我自己关于这个问题的头脑风暴期间,我发现我省略了最简单的解决方案:
1)在A中创建C和D实例
2)使用prepareForSegue
方法将它们传递给B.
3)在B中将它们分配给VC
4)Voila,我可以直接从A访问它们的变量和函数