我正在iPhone应用程序开发中与键盘辞职功能一起工作。我想知道为什么。
self.textField.delegate = self
需要包含在viewController的viewDidLoad中。我已经尝试找到原因,但目前还没有清晰的解释。
我正在iPhone应用程序开发中与键盘辞职功能一起工作。我想知道为什么。
self.textField.delegate = self
需要包含在viewController的viewDidLoad中。我已经尝试找到原因,但目前还没有清晰的解释。
几点说明:
你需要设置代理的原因是因为如果没有它,视图就不知道视图控制器的存在。所以它不会知道你的方法textFieldDidEndEditing
,也就永远不会被调用。
这就是委托的基本原则,你告诉那个对象,“这里有一个对象,我希望你调用它的方法”。
它不必在viewDidLoad
中设置,但通常将代理设置为视图的最方便的地方。
代理不一定是视图控制器(self
),在你的情况下,这是最简单的方法,但对于UITableView
,通常会有另一个类成为代理,以便所有逻辑不都在一个地方,也可以进行更改。
self.textField.delegate = self
,因为UITextFieldDelegate的所有方法都是可选的。blah.delegate = amazingPlace 将消息发送到“amazingPlace”。
blah.delegate = somewhereElse 将消息发送到“somewhereElse”。
blah.delegate = self 将消息发送给您。
... 检查此源链接以获取详细信息
textField
对象正在与您的视图控制器进行通信。这就是为什么您需要将您的视图控制器设置为其代理的原因。否则,文本字段没有代理对象(您的视图控制器)来进行通信。文本字段在特定时间触发某些方法,例如textFieldDidBeginEditing
,如果有代理对象,则在其上调用这些方法。当您将您的视图控制器注册为文本视图的代理时,您可以利用这些回调。textFieldShoulEndEditing
或者
textFieldDidEndEditing