ios - Swift,如何告诉 Controller 另一个 Controller 是它的委托(delegate)

标签 ios swift delegates

我正在学习 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/

相关文章:

ios - View Controller 的对象 swift 隐藏在视频背景后面

objective-c - AFNetworking在返回JSON时将String值转换为整数吗?

c# - 在构造函数中作为通用类型的操作会产生编译错误

c# - C# 委托(delegate)是线程安全的吗?

ios - 以编程方式滚动 UIScrollView 但不仅仅在委托(delegate)方法中处理此操作?

ios - 通过 View Controller 传递数据的问题(使用 segues)xcode

objective-c - NSMutableArray获取[__NSCFString计数]:无法识别的选择器已发送到实例

ios - 使用 UINavigationController 和 UINavigationBar 的区别

ios - Mapbox 动画用户位置更流畅

xcode - 此应用程序正在从后台线程 swift2.0 修改自动布局引擎