为什么需要在一个视图控制器中使用委托?

时间:2016-06-23 05:33:52

标签: ios xcode swift delegates viewcontroller

我的兄弟和我开始使用Apple制作的开始开发iOS应用程序(Swift)教程,使用Swift制作我们的iOS应用程序。在本教程的开头,我们使用委托来允许按钮将标签的文本更改为文本字段中的文本。我们不确定为什么我们需要使用委托并让类自己进行数据访问。我们已经做了很多研究,似乎使用委托的唯一原因是当你需要将数据提供给以前的视图控制器时。为什么需要在单个视图控制器中使用委托?谢谢。

2 个答案:

答案 0 :(得分:1)

委托是一个对象,当该对象遇到程序中的事件时,该对象代表另一个对象或与另一个对象协同工作。委托对象通常是响应者对象 - 即从AppKit中的NSResponder或UIKit中的UIResponder继承的对象,它响应用户事件。委托是一个对象,它委托控制该事件的用户界面,或者至少要求以特定于应用程序的方式解释事件。

委派方法具有传统形式。它们以AppKit或UIKit对象的名称开头,执行委托应用程序,窗口,控件等;此名称是小写的,没有“NS”或“UI”前缀。通常(但不总是)此对象名称后跟辅助动词,该辅助动词指示所报告事件的时间状态。换句话说,这个动词表示事件是否即将发生(“应该”或“将要”)或者是否刚刚发生(“已”或“有”)。这种时间上的区别有助于对那些期望返回值的消息和那些不返回值的消息进行分类。

您必须将框架可用委托与您可以创建的框架类协议/委托区分开来:

成为框架类的代表 框架类或实现委托的任何其他类声明委托属性和协议(通常是正式协议)。该协议列出了委托实现的必需和可选方法。要使您的类的实例充当框架对象的委托,它必须执行以下操作:

  • 将您的对象设置为委托(通过将其指定给委托 属性)。您可以通过编程方式或通过接口执行此操作 助洗剂。
  • 如果协议是正式的,请声明您的班级采用了 类定义中的协议。

示例:

class myClass: NSObject,myCustomDelegate {
   ...
}

同样在这个SO thread中你可以找到一些例子..

  • 实现协议的所有必需方法和任何可选方法 您想参与的方法。

Apple官方Source

答案 1 :(得分:0)

所以你可能使用故事板,所有UIView组件,如UIButtons / UITextFields等都是出口,你可以直接在你的UIViewController中访问它们。

  

代表团:

委托是一对一的连接关系,想象一种情况,你需要为你的视图构建一个复杂的布局,你创建一个UIView的子类并在那里绘制/布局你的组件,而不是在UIViewController中将这个视图添加到subivew,如果您需要监听该视图中的事件(按钮单击,ScrollView偏移更改等),您将需要创建一个侦听这些事件的协议,并告诉您实现该协议的UIViewController存在于复杂的UIView中,因为MVC你的控制器是需要改变视图,发出请求和东西的人,所以他必须努力工作,所以你需要通过该代表将数据或事件传递给你的控制器。

我不是老师,所以我希望你理解我的观点。