从 UITextField 子类捕获委托方法而不是委托
Capture delegate methods from UITextField subclass without being the delegate
我有一个 UITextField
子类。我需要知道文本何时发生变化,并且我能够通过 NotificationCenter
和观察 .UITextFieldTextDidChange
获得它,但现在我需要知道用户何时点击 return 按钮。我能想到的唯一解决方案是将 UITextField
子类设置为它自己的委托,但这听起来并不干净。
- 有没有一种干净的方法可以从子类
中获取return键事件
- 可以将
UITextField
子类设置为它自己的委托吗?
在你的子类中做
self.addTarget(self, action: #selector(returnKeyPressed), for: .editingDidEndOnExit);
查看 Apples 文档,您会看到 UIControlEvents
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing
您可以将您的 viewController 设置为代表。在viewDidLoad
中你可以添加这行代码。
myTextField.delegate = self
您还需要 viewController 的 UITextFieldDelegate 协议。
extension MyViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//User tapped the return button
return true
}
}
我认为将委托设置为subclass没有错。如果您需要知道 class 之外的水龙头,那么您将需要另一个代表,因此您不妨使用我的第一个解决方案。您还应该知道,如果您更改委托,您在 subclass 中的代码将不会再被调用,这可能会导致意外行为。
我有一个 UITextField
子类。我需要知道文本何时发生变化,并且我能够通过 NotificationCenter
和观察 .UITextFieldTextDidChange
获得它,但现在我需要知道用户何时点击 return 按钮。我能想到的唯一解决方案是将 UITextField
子类设置为它自己的委托,但这听起来并不干净。
- 有没有一种干净的方法可以从子类 中获取return键事件
- 可以将
UITextField
子类设置为它自己的委托吗?
在你的子类中做
self.addTarget(self, action: #selector(returnKeyPressed), for: .editingDidEndOnExit);
查看 Apples 文档,您会看到 UIControlEvents
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing
您可以将您的 viewController 设置为代表。在viewDidLoad
中你可以添加这行代码。
myTextField.delegate = self
您还需要 viewController 的 UITextFieldDelegate 协议。
extension MyViewController: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
//User tapped the return button
return true
}
}
我认为将委托设置为subclass没有错。如果您需要知道 class 之外的水龙头,那么您将需要另一个代表,因此您不妨使用我的第一个解决方案。您还应该知道,如果您更改委托,您在 subclass 中的代码将不会再被调用,这可能会导致意外行为。