我正在学习 Swift 并且正在研究委托(delegate)模式。 我想我完全理解什么是授权及其工作原理,但我有一个问题。
我遇到这样一种情况, Controller A 是 Controller B 的委托(delegate)。
在 Controller B 中,我定义了一个委托(delegate)协议(protocol)。 在 Controller B 中,我设置了一个变量委托(delegate)(可选) 在 Controller B 中,当委托(delegate)发生某些事情时我发送消息 Controller A必须采用我协议(protocol)的方法才能成为委托(delegate)
我无法理解是否每个委托(delegate) Controller (在本例中为 A)都监听 Controller B 发送的消息,或者我是否必须告诉 Controller B A 现在是他的委托(delegate)。
我注意到有人使用这段代码(在 Controller A 中)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Example" {
let navigationController = segue.destinationViewController as UINavigationController
let controller = navigationController.topViewController as AddItemViewController
controller.delegate = self
}
}
这是告诉委托(delegate)人谁是他的委托(delegate)人的唯一方法吗?
最佳答案
我相信,您需要在创建它时告诉委托(delegate)人谁是它的委托(delegate)人。现在,可以通过编程方式或通过 Storyboard创建委托(delegate)人。因此,基于您有两个选择,您可以通过编程方式告诉它谁是它的委托(delegate)人,就像您在代码中或从 IB 中展示的那样。
这里的关键在于创建。让我自己解释一下。以 UIView 为例。比如说,您想要一个自定义 UIView 对象 (CustomView)。因此,您将 UIView 拖放到 View Controller 中,并在身份检查器中将其类分配为 CustomView 的类。所以,基本上,一旦创建了 Controller ,您的自定义 View 也将被创建。现在,您可以说创建它的 View Controller 是它的委托(delegate),或者您可以转到 IB 并将 View 的委托(delegate)连接到 View Controller 。
现在,假设您希望以编程方式在 ViewController 中创建自定义 View 。在这种情况下,您可能会调用 -initWithFrame:
方法来创建 View ,并在创建时告诉委托(delegate)人谁是它的委托(delegate)人,例如-
myCustomView.delegate = self;
View Controller 也是如此。
controller.delegate = self;
因此,基本上要告诉委托(delegate)人谁是它的委托(delegate)人,您首先需要创建该委托(delegate)人。至少,我是这么认为的。
关于ios - Swift,如何告诉 Controller 另一个 Controller 是它的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32347923/