2

有没有办法观察 UITextField 的 selectedTextRange 的变化?

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

另一个死胡同—— UIKit 类不兼容 KVO。

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

有任何想法吗?

4

1 回答 1

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

于 2013-03-27T12:16:34.860 回答