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
)。