UITextField – 观察对selectedTextRange的更改?

有没有办法观察对UITextField的selectedTextRange的更改?

我尝试观察所有UIControlEvents。 但是更改selectedTextRange不会触发UIControlEvent。

另一个死胡同–UIKit类不符合KVO标准。

然后是UITextFieldTextDidChangeNotification。 但这是对文本的更改。

有任何想法吗?

子类UITextField如下。

 @interface WJTextField : UITextField @end @protocol WJTextFieldDelegate  - (void) textFieldDidChangeSelection: (UITextField *) textField; @end 

执行:

 @implementation WJTextField - (void) setSelectedTextRange: (UITextRange *) selectedTextRange { [super setSelectedTextRange: selectedTextRange]; if ([self.delegate respondsToSelector: @selector(textFieldDidChangeSelection:)]) [(id ) self.delegate textFieldDidChangeSelection: self]; } @end 

然后将-textFieldDidChangeSelection:添加到文本字段的委托中。

警告:此代理消息仅在移动光标时发送,在键入或粘贴文本时不会发送,对于那些必须实现textField:shouldChangeCharactersInRange:replacementString:事件textField:shouldChangeCharactersInRange:replacementString: ,其中选择范围将被设置到range.location + [string length] (如果你返回YES )或保持不变(如果你返回NO )。