UITextField - 观察对selectedTextRange的更改?

时间:2013-03-03 23:25:03

标签: ios text uitextfield selection

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

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

另一个死胡同 - UIKit类不符合KVO。

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

有什么想法吗?

1 个答案:

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