我有一个UITextField
子类。我需要知道文本何时发生了变化,我能够通过NotificationCenter
得到它并观察.UITextFieldTextDidChange
,但现在我需要知道用户点击返回按钮的时间。我能想到的唯一解决方案是将UITextField
子类设置为自己的委托,但听起来并不干净。
UITextField
子类设置为自己的委托是否可以? 答案 0 :(得分:2)
在您的子类中执行
self.addTarget(self, action: #selector(returnKeyPressed), for: .editingDidEndOnExit);
查看Apples文档,您会看到UIControlEvents
UIControlEventEditingDidEndOnExit = 1<< 19,//'返回键'结束编辑
答案 1 :(得分:0)
您可以将viewController设置为委托。在viewDidLoad
中,您可以添加此行代码。
myTextField.delegate = self
您还需要viewController的UITextFieldDelegate协议。
extension MyViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//User tapped the return button
return true
}
}
我认为将委托设置为子类没有任何问题。如果你需要知道班级以外的水龙头,那么你将需要另一名代表,所以你不妨使用我的第一个解决方案。您还应该知道,如果更改委托,则不再调用子类中的代码,这可能会导致意外行为。