如何在UITextField中检测KeyPress事件?

本文关键字:KeyPress 事件 检测 UITextField | 更新日期: 2023-09-27 18:13:41

UITextView中有一个Changed事件来处理按键。然而UITextField没有这样的事件。

如何检测UITextField中的KeyPress事件?

这里有一个方法描述使用通知,但我的问题是,我不能从TextFieldTextDidChangeNotification取消订阅。

如何在UITextField中检测KeyPress事件?

我不确定你的问题是哪个。第一个问题你似乎已经自己回答了,也就是。解决方案(从您的链接)是使用NSNotificationCenter.DefaultCenter.AddObserver

第二个是关于取消的订阅-如果你想停止观察,你应该调用之前的对应方法,即NSNotificationCenter.DefaultCenter.RemoveObserver

只保留从AddObserver返回的对象,以便您可以将其提供给RemoveObserver

注意:如果我没有正确理解你的问题,请使用编辑并添加一些细节和/或你想要实现的代码,我们将尽我们最大的努力帮助:-)

按照colinta的建议,这样做

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];
  NSLog(@"range = %@, replacement = %@, text = %@", NSStringFromRange(range), string, text);
  return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField {
  NSLog(@"clear text");
  return YES;
}

如果输入是通过拼写建议更改的,

查看UITextFieldDelegate

http://developer.apple.com/library/ios/文档/uikit/引用/UITextFieldDelegate_Protocol/UITextFieldDelegate UITextFieldDelegate.html

实现该协议。

观察UITextField变化的最干净的方法是

_textField.AddTarget((sender, e) =>
{
    // Do your stuff in here
}, UIControlEvent.EditingChanged);

你不需要订阅一个系统范围的通知中心,当你销毁一个文本字段时,你也不需要取消observer的注册。

希望这对将来的人有帮助