有没有办法观察 UITextField 的 selectedTextRange 的变化?
我尝试观察所有 UIControlEvents。但是更改 selectedTextRange 不会触发 UIControlEvent。
另一个死胡同—— UIKit 类不兼容 KVO。
然后是 UITextFieldTextDidChangeNotification。但这是对文本的更改。
有任何想法吗?
有没有办法观察 UITextField 的 selectedTextRange 的变化?
我尝试观察所有 UIControlEvents。但是更改 selectedTextRange 不会触发 UIControlEvent。
另一个死胡同—— UIKit 类不兼容 KVO。
然后是 UITextFieldTextDidChangeNotification。但这是对文本的更改。
有任何想法吗?
子类UITextField
如下。
@interface WJTextField : UITextField
@end
@protocol WJTextFieldDelegate <UITextFieldDelegate>
- (void) textFieldDidChangeSelection: (UITextField *) textField;
@end
执行:
@implementation WJTextField
- (void) setSelectedTextRange: (UITextRange *) selectedTextRange
{
[super setSelectedTextRange: selectedTextRange];
if ([self.delegate respondsToSelector: @selector(textFieldDidChangeSelection:)])
[(id <WJTextFieldDelegate>) self.delegate textFieldDidChangeSelection: self];
}
@end
然后添加-textFieldDidChangeSelection:
到您的文本字段的委托。
警告:此委托消息仅在光标移动时发送,在键入或粘贴文本时不会发送,对于那些您必须实现的事件textField:shouldChangeCharactersInRange:replacementString:
,选择范围将设置为range.location + [string length]
(如果您返回YES
)或保持不变(如果您返回NO
)。