2013-03-03 162 views
2

有什么办法可以观察对UITextField的selectedTextRange的更改吗?UITextField - 观察对selectedTextRange的更改吗?

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

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

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

任何想法?

回答

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

+0

我只想提一提,在键入或粘贴文本时确实会触发。至少在iOS8中,我没有检查其他东西。 – philipp 2015-02-10 09:59:29