ios - 一个delegate可以申请两个VC吗

标签 ios swift delegates protocols

我认为我正在以一种不应该起作用的方式使用协议(protocol)……但它确实起作用了。有人可以告诉我我在做什么吗?

示例

假设我的应用有三个 View Controller :MainView、SecondaryView、EditorView。 EditorView 具有应在其他 View 中运行代码的按钮。我有一个允许我远程触发功能的协议(protocol)。

这是一件奇怪的事情,我正在做的事情也许我不应该...但它正在工作:MainView 和 SecondaryView 都遵循相同的协议(protocol)。我不明白为什么会这样,但确实如此。

当我在 MainView 中并加载 EditorView 时,例如单击“添加”,MainView 中的代码运行并工作。

当我在 SecondaryView 中加载 EditorView 并单击“添加”时,SecondaryView 中的代码运行并起作用。

问题

如果没问题,它如何确定委托(delegate)给哪个(主要还是次要)?如果不行,为什么它会起作用?

最佳答案

这不仅不错,而且很棒。您已经发现协议(protocol)的主要好处之一。

EditorView 中,您有一个 delegate 属性(您可能已将其命名为其他名称):

weak var delegate : EditorProtocol?

MainViewSecondaryView 中的某处还有一些代码,如下所示:

let editor = EditorView() // or perhaps you get it in prepareForSegue(_:sender:)
editor.delegate = self

告诉 EditorView 要与哪个对象通信。

然后在 EditorView 中调用如下代码:

delegate?.doSomething()

如果 MainView 创建了这个编辑器,那么 delegate 就是一个 MainView。否则,它是一个 SecondaryView

当您将 delegate(或您命名的任何名称)设置为特定对象时,EditorView 将与之通信。

关于ios - 一个delegate可以申请两个VC吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657846/

相关文章:

swift - 调用静态方法,不重复类名

c# - 是否可以更改 Func<T, bool> 委托(delegate)的泛型类型参数?

android - kotlin 委托(delegate)属性,在 get() 方法中我如何访问该值?

iphone - 在突出显示时更改 UITableView cell.detailTextLabel 颜色

ios - 单击按钮时加载 Tabbar Controller

ios - 如何在 iOS 13 中的 UINavigationItem 中将 UIBarButtonItem 向右移动到 largeTitle 旁边

swift - 类型 'PFFacebookUtils' 在 swift 上没有成员 'session'

ios - UIImageView 添加到单元格 contentView 在滚动 UITableView 时随机显示

swift - 如何旋转键盘,是否可以同时进行两个不同的文本输入?

ios - 如何在非 UIVIewController 单例中设置委托(delegate)? (iOS)