有没有办法观察对UITextField的selectedTextRange的更改?
我尝试观察所有UIControlEvents。但是更改selectedTextRange不会触发UIControlEvent。
另一个死胡同 - UIKit类不符合KVO。
然后是UITextFieldTextDidChangeNotification。但这是对文本的修改。
有什么想法吗?
答案 0 :(得分:3)
子类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
)。