Ios self.textField.delegate=self在swift中如何工作?

Ios self.textField.delegate=self在swift中如何工作?,ios,swift,swift2,Ios,Swift,Swift2,我正在iPhone应用程序开发中使用键盘功能。我想知道为什么 self.textField.delegate = self 需要包含在viewController的viewDidLoad中。我曾试图找出原因,但至今还没有明确的解释 UITextFieldDelegate协议定义了用于管理UITextField对象中文本的编辑和验证的方法。本协议的所有方法都是可选的 文本字段调用其委托的方法以响应重要更改。您可以使用这些方法验证用户键入的文本,响应与键盘的特定交互,并控制整个编辑过程。编辑在文

我正在iPhone应用程序开发中使用键盘功能。我想知道为什么

self.textField.delegate = self 
需要包含在viewController的viewDidLoad中。我曾试图找出原因,但至今还没有明确的解释

UITextFieldDelegate协议定义了用于管理UITextField对象中文本的编辑和验证的方法。本协议的所有方法都是可选的

文本字段调用其委托的方法以响应重要更改。您可以使用这些方法验证用户键入的文本,响应与键盘的特定交互,并控制整个编辑过程。编辑在文本字段成为第一响应者并显示键盘(或其指定的输入视图)之前不久开始

如果不想管理UITextField对象中文本的编辑和验证,则无需使用
self.textField.delegate=self
,因为
UITextFieldDelegate
的所有方法都是可选的

对于您的其他问题,如“做什么”。委派=自己做

当您“设置代理”时,您所做的是说出消息要发送到的位置

因此,

blah.delegate=amazingPlace将向“amazingPlace”发送消息

blah.delegate=somewhere将消息发送到“somewhere”

blah.delegate=self将向您发送消息


。。。选中此项

您需要使用
self.textField.delegate=self
或者使您的viewcontroller(或任何其他类)成为具有
类MyViewController:UITextFieldDelegate
的委托,并通过将控件从文本字段拖动到viewcontroller来设置情节提要中UITextField的委托


代理是iOS开发中的关键概念,因此我建议仔细研究一下为他们准备的解决方案。在某些情况下,创建自己的自定义委托也非常有用,因此在正确的位置理解和使用它们可以真正帮助改进项目的结构

使用它们有几个关键原因。首先,它们允许类之间的安全通信。在您的示例中,您正在使用的
textField
对象正在与视图控制器通信。这就是为什么需要将视图控制器设置为其委托。否则,文本字段没有要与之通信的委托对象(视图控制器)。文本字段在特定时间触发某些方法,例如
textfielddebeginediting
,并在其委托对象上调用这些方法(如果有)。当您将视图控制器注册为文本视图的代理时,您可以点击这些回调


另一个好处是委托允许您分离关注点并封装或抽象职责。文本视图的主要关注点可能是如何在其视图中处理文本,但不一定是在输入文本时,或在按下键盘上的返回按钮时,或如何验证输入的文本时,该做什么。最好将这些任务交给其他对象,例如委托(用Obj-C的说法),这就是为什么在您的示例中,必须将一个类注册为另一个类的委托

如前所述,UITextfield委托允许您控制textfield上的事件。 您将能够编辑以下函数

textFieldShoulEndEditing

以添加自定义规则,例如:文本验证

看一看

如果您不需要它,可以在类声明中删除此行和UITextfieldDelegate。

几点

  • 需要设置委托的原因是,没有委托,视图就不知道视图控制器。所以它不会知道你的方法
    textfielddidediting
    ,也不会被调用

  • 这是委托的基本前提,你告诉那个对象,“这是一个我希望你调用方法的对象”

  • 它不必在
    viewDidLoad
    中设置,但它通常是为视图设置代理最方便的地方

  • 委托不必是视图控制器(
    self
    ),在您的情况下,这是最简单的方法,但是对于
    UITableView
    来说,让另一个类成为委托是很常见的,这样所有的逻辑就不在一个地方,所以它可以被更改


  • 我确实认识这位代表。无法理解它与此处的关系如何?如果您希望控制器成为文本字段的代理,那么您将如何执行?self不一定在此处引用控制器。是吗?如果代码在视图控制器源代码中,是的,为了使用委托方法,如sjould开始编辑,我们需要对textfield进行加密,delegate=self我的问题是,为什么我需要它,而不是如何添加。是的,我现在明白了。仍然没有回答问题。我知道我们可以用textFieldDelegate实现哪些功能。我的问题完全不同:self.textField.delegate=自助服务的目的是什么?它正在激活委托为什么它会激活自身?为什么它必须在viewDidLoad中?这行代码说:这个类实例(self)将能够重写UITextfield函数。ViewDidLoad用于在加载视图之后调用所需的函数。花点时间了解view lifecycle.Perfect。正是我想要的。
    textFieldDidEndEditing