当前位置:   article > 正文

UITextField监控文字变化_uitextfield 删除为空时走了两次监听

uitextfield 删除为空时走了两次监听

UITextFieldTextDidChangeNotification

1、手动设置UITextField.text=nil或者@""或者@"任何字符串"都不会触发这个通知,在输入框输入/删除文字、剪切/粘贴输入框文字、输入中文拼音、点击自带的clearButton清空文字时会触发(点击输入键盘上方的待选文字时会触发两次)。
2、可以在设置UITextField.text时,调用NSNotificationCenter的postNotificationName手动发送这个通知。

UIControlEventEditingChanged

1、效果和UITextFieldTextDidChangeNotification一样,手动设置UITextField.text时不触发这个事件。
2、可以在设置UITextField.text时,手动调用对应的selector方法,也可以重写-setText:方法。

RCTextField:
[self addTarget:self action:@selector(textDidChange:) forControlEvents:UIControlEventEditingChanged];

- (void)setText:(NSString *)text {
	[super setText:text];
    [self textDidChange:self];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3、即使使用这个UITextField子类(即RCTextField)时再一次调用“[rctextField addTarget:self action:@selector(client_TextDidChange:) forControlEvents:UIControlEventEditingChanged];”,也会同时调用textDidChange和client_TextDidChange。(如果RCTextField的实现代码中设置delegate为self,而使用RCTextField时设置delegate为其他对象obj,则RCTextField的实现代码中的协议方法不会被调用,只会调用obj中实现的协议方法。)

UIControlEventValueChanged

UITextField编辑时或者设置text属性修改文字时,不会触发这个事件。

- textFieldDidChangeSelection:

1、好像手动设置UITextField.text时可以触发这个协议方法,但是iOS13之后才支持。
2、如果在UITextField子类的实现代码中设置delegate为子类本身,而使用这个子类时设置delegate为其他对象obj,则子类的实现代码中的协议方法不会被调用,只会调用obj中实现的协议方法。

- textField:shouldChangeCharactersInRange:replacementString:

不能用来监测文字变化,因为这个方法是在用户编辑文字时用来询问是否可以修改,调用时textField.text是修改之前的文字,手动设置UITextField.text不会触发。

- addObserver:forKeyPath:@"text"options:context:

只有手动设置UITextField.text时触发,在输入框输入文字时不触发。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/322121
推荐阅读
相关标签
  

闽ICP备14008679号