swift2 self.textField.delegate = self在swift中是如何工作的?

5ktev3wc  于 2022-11-06  发布在  Swift
关注(0)|答案(5)|浏览(170)

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

self.textField.delegate = self

需要包含在viewController的viewDidLoad中。我已经尝试寻找原因,但到目前为止还没有明确的解释。

8i9zcol2

8i9zcol21#

几个要点
1.你需要设置委托的原因是因为没有它,视图就不知道视图控制器,所以它就不知道你的方法textFieldDidEndEditing,也就永远不会被调用。
1.这是委托的基本前提,你告诉那个对象,“这是一个对象,我想让你在上面调用方法”
1.它并不一定要在viewDidLoad中设置--但是它通常是为视图设置代理的最方便的地方。
1.委托不一定是视图控制器(self),在您的情况下,这是最简单的方法,但对于UITableView,通常有另一个类作为委托,这样所有的逻辑就不会在一个地方,所以它可以被更改。

kgsdhlau

kgsdhlau2#

UITextFieldDelegate协议定义用于管理UITextField对象中文本的编辑和验证的方法。此协议的所有方法都是可选的。
文字字段会呼叫其委派的方法,以回应重要的变更。您可以使用这些方法来验证使用者所输入的文字、回应与键盘的特定互动,以及控制整个编辑程序。编辑会在文字字段成为第一个回应者并显示键盘(或其指派的输入检视)之前不久开始。
more info. check apple doc.开始
如果您不想管理UITextField对象中文本的编辑和验证,则不必使用self.textField.delegate = self,因为UITextFieldDelegate的所有方法都是可选的。
对于您的其他问题,如.delegate = self做什么??
当你“设置代理”时,你所做的就是说你想把消息送到哪里。
因此,
等等。delegate = amazingPlace会将消息发送到“amazingPlace”。
delegate = somewhereElse会将消息发送到“somewhereElse”。
等等。delegate = self会将消息发送给您。
...请检查此source link for details

js81xvg6

js81xvg63#

代理是iOS开发中的关键概念,所以我建议你好好看看documentation。在某些情况下,创建你自己的自定义代理也会特别有用,所以在正确的地方理解和使用它们确实有助于改善你的项目结构。
使用它们有两个主要原因:第一,它们允许类之间的安全通信。在您的示例中,你正在使用的textField对象正在与你的视图控制器通信。这就是为什么你需要将你的视图控制器设置为它的委托。否则文本字段就没有委托对象文本字段在特定时间触发特定方法,例如textFieldDidBeginEditing、并在它的委托对象上调用这些回调函数(如果它有委托对象的话)。当你将视图控制器注册为文本视图的委托时,你可以利用这些回调函数。
另一个好处是,委托允许您分离关注点,封装或抽象责任。文本视图的主要关注点可能是如何处理视图中的文本,而不一定是当输入时该做什么,或者当键盘上的返回按钮被按下时该做什么,或者如何验证输入的文本。最好将这些任务交给其他任务,例如委托(用Obj-C的说法),这就是为什么在示例中必须将一个类注册为另一个类的委托。

dzhpxtsq

dzhpxtsq4#

如前所述,UITextfield委托允许您控制文本字段上的事件。

textFieldShoulEndEditing

textFieldDidEndEditing

以添加自定义规则,例如:文本验证。
看一下Apple doc
如果您不需要它,可以删除此行和类声明中的UITextfieldDelegate。

jdg4fx2g

jdg4fx2g5#

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

相关问题