为什么需要在一个视图控制器中使用委托?
Why do you need to use delegates in one view controller?
我和我的兄弟开始使用 Swift 制作我们的 iOS 应用程序,方法是学习 Apple 制作的开始开发 iOS 应用程序 (Swift) 教程。在教程的开头,它让我们使用委托来允许按钮将标签的文本更改为文本字段中的文本。我们不确定为什么我们需要使用委托并让 类 自己进行数据访问。我们做了很多研究,似乎使用委托的唯一原因是当您需要将数据返回给以前的视图控制器时。为什么需要在单个视图控制器中使用委托?谢谢。
所以你可能使用故事板,你所有的 UIView 组件,如 UIButtons/UITextFields 等等......都是出口,你可以直接在你的 UIViewController 中访问它们。
Delegation:
委托是一对一的连接关系,想象一下这样一种情况,你需要为你的视图构建一个复杂的布局,你创建一个 UIView 的子类,draw/layout 你的组件在那里,然后将这个视图添加到 subivew在您的 UIViewController 中,如果您需要监听该视图中的事件(按钮点击、ScrollView 偏移量更改等),您将需要创建一个监听这些事件的协议,并告诉实现该协议的 UIViewController 存在于你复杂的 UIView 中,因为 MVC 你的控制器是需要更改视图、发出请求和其他东西的人,他必须做这些艰苦的工作,所以你需要通过该委托将数据或事件传递给你的控制器.
我不是老师所以我希望你明白我的意思。
委托 是一个对象,当另一个对象遇到程序中的事件时,该对象代表另一个对象或与之协调。委托对象通常是响应者对象——即从 AppKit 中的 NSResponder 或 UIKit 中的 UIResponder 继承的对象——响应用户事件。委托是一个对象,该对象被委托控制该事件的用户界面,或者至少被要求以特定于应用程序的方式解释该事件。
委派方法 具有常规形式。它们以执行委托的 AppKit 或 UIKit 对象的名称开头——应用程序、window、控制等;这个名字是小写的,没有“NS”或“UI”前缀。通常(但不总是)这个对象名称后跟一个助动词,指示所报告事件的时间状态。换句话说,这个动词表示事件是即将发生(“应该”或“将要”)还是刚刚发生(“已经发生”或“已经发生”)。这种时间上的区别有助于对需要 return 值的消息和不需要的消息进行分类。
您必须将框架可用委托与您可以创建的框架 class protocol/delegate 区分开来:
成为框架的代表Class
框架 class 或任何其他实现委托的 class 声明委托 属性 和协议(通常是正式协议)。该协议列出了委托实现的必需和可选方法。要使 class 的实例充当框架对象的委托,它必须执行以下操作:
- 将您的对象设置为委托(通过将其分配给委托
属性)。您可以以编程方式或通过界面执行此操作
生成器。
- 如果协议是正式的,请声明您的 class 采用
class 定义中的协议。
示例:
class myClass: NSObject,myCustomDelegate {
...
}
您还可以在此 SO thread 中找到一些示例..
- 实施协议的所有必需方法和任何可选方法
您想参与的方法。
苹果官方Source
我和我的兄弟开始使用 Swift 制作我们的 iOS 应用程序,方法是学习 Apple 制作的开始开发 iOS 应用程序 (Swift) 教程。在教程的开头,它让我们使用委托来允许按钮将标签的文本更改为文本字段中的文本。我们不确定为什么我们需要使用委托并让 类 自己进行数据访问。我们做了很多研究,似乎使用委托的唯一原因是当您需要将数据返回给以前的视图控制器时。为什么需要在单个视图控制器中使用委托?谢谢。
所以你可能使用故事板,你所有的 UIView 组件,如 UIButtons/UITextFields 等等......都是出口,你可以直接在你的 UIViewController 中访问它们。
Delegation:
委托是一对一的连接关系,想象一下这样一种情况,你需要为你的视图构建一个复杂的布局,你创建一个 UIView 的子类,draw/layout 你的组件在那里,然后将这个视图添加到 subivew在您的 UIViewController 中,如果您需要监听该视图中的事件(按钮点击、ScrollView 偏移量更改等),您将需要创建一个监听这些事件的协议,并告诉实现该协议的 UIViewController 存在于你复杂的 UIView 中,因为 MVC 你的控制器是需要更改视图、发出请求和其他东西的人,他必须做这些艰苦的工作,所以你需要通过该委托将数据或事件传递给你的控制器.
我不是老师所以我希望你明白我的意思。
委托 是一个对象,当另一个对象遇到程序中的事件时,该对象代表另一个对象或与之协调。委托对象通常是响应者对象——即从 AppKit 中的 NSResponder 或 UIKit 中的 UIResponder 继承的对象——响应用户事件。委托是一个对象,该对象被委托控制该事件的用户界面,或者至少被要求以特定于应用程序的方式解释该事件。
委派方法 具有常规形式。它们以执行委托的 AppKit 或 UIKit 对象的名称开头——应用程序、window、控制等;这个名字是小写的,没有“NS”或“UI”前缀。通常(但不总是)这个对象名称后跟一个助动词,指示所报告事件的时间状态。换句话说,这个动词表示事件是即将发生(“应该”或“将要”)还是刚刚发生(“已经发生”或“已经发生”)。这种时间上的区别有助于对需要 return 值的消息和不需要的消息进行分类。
您必须将框架可用委托与您可以创建的框架 class protocol/delegate 区分开来:
成为框架的代表Class 框架 class 或任何其他实现委托的 class 声明委托 属性 和协议(通常是正式协议)。该协议列出了委托实现的必需和可选方法。要使 class 的实例充当框架对象的委托,它必须执行以下操作:
- 将您的对象设置为委托(通过将其分配给委托 属性)。您可以以编程方式或通过界面执行此操作 生成器。
- 如果协议是正式的,请声明您的 class 采用 class 定义中的协议。
示例:
class myClass: NSObject,myCustomDelegate {
...
}
您还可以在此 SO thread 中找到一些示例..
- 实施协议的所有必需方法和任何可选方法 您想参与的方法。
苹果官方Source