ios - ViewController 的多个委托

Posted

技术标签:

【中文标题】ios - ViewController 的多个委托【英文标题】:ios - Multiple Delegates for a ViewController 【发布时间】:2015-07-28 21:25:36 【问题描述】:

我有一个 ViewController,它充当两个 VC 的容器。此类称为 MasterDetailViewController。是一个自定义视图控制器容器。 MasterDetailViewController 可以与 Master 或 Detail View Controller 通信,因此它们可以了解以下状态:“显示详细 ViewController 的动画已启动”、“VC 的可见矩形”和类似的消息。问题是我需要不同的大师方法和不同的细节方法。

有两个协议可以吗:MasterViewControllerDelegate DetailViewControllerDelegate

MasterViewController 有两个属性delegateM 和delegateD 分别符合各自的协议?

我问这个是因为委托模式是 1:1 的关系,我从未见过这样使用它。

谢谢

【问题讨论】:

这两种协议有何不同?我之所以问是因为在委托调用参数中包含发件人对象是很常见的,这样委托对不同的发件人就可以表现出不同的行为。 今天两者都有 2 种通用功能,并且每一种都有不同的功能。我可以“合并”它们并采用您的方法。所以我保留一个协议并发送发送者 VC,并且委托只会在发送者的类等于他的情况下做某事,对吧? @MichaelL 我想多了,但这种方法行不通。实际上发生的是我的 MasterDetailViewController 需要通知两个不同的 VC 将发生的不同操作。此外,他还需要被告知 Master 和 Detail VC 发生的事情...... 好的,所以我在这种情况下所做的就是将主控制器的弱引用传递给它的任何子控制器。我不称他们为代表。当各种各样的类可以使用相同的委托协议时,委托协议才有意义。在这种情况下,就照原样称呼它。 谢谢@MichaelL 我喜欢那个解决方案。把它作为答案,这样我就可以选择它。我可能会对我的 UIViewControlBase(我所有的 UIViewControllers 的公共类)进行扩展,并且会找到类型为 MasterDetailViewController 或 nil 的父级,如果它们不是的话。有点类似的做法!感谢这个想法 【参考方案1】:

在这种情况下,我所做的是将主控制器的弱引用传递给它的任何子控制器。我不称他们为代表。当各种各样的类可以使用相同的委托协议时,委托协议才有意义。在这种情况下,就这样称呼它吧。

【讨论】:

以上是关于ios - ViewController 的多个委托的主要内容,如果未能解决你的问题,请参考以下文章

iOS——何时创建子 ViewController 与 UIView 子类?

在UIKit中无缝结合多个ViewController

iOS - 在 ViewController 之间共享数据

如何在一个 ViewController 中打开多个文件?

从另一个 ViewController 呈现故事板 ViewController

创建一个viewcontroller并将现有VC的标签和按钮添加到新的VC Swift iOS