检测UITextView上的选择更改?

时间:2013-07-27 17:05:34

标签: ios objective-c uitextview

有没有办法检测用户何时更改textview中所选文本的范围(在UITextView的子类中)? 我找不到任何NSNotification。我尝试观察keyvalues但是所选范围的观察者不会被调用

[self addObserver:self forKeyPath:@"selectedRange" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqual:@"selectedRange"])
    {
        // Do stuff
    }
}

我不想使用UITextView的委托方法

2 个答案:

答案 0 :(得分:10)

UITextView采用UITextInput协议。该协议包括必需的selectedTextRange读/写属性。这是您想要响应变化的属性。

虽然您可以观察到该属性,但最简单的方法是覆盖子类中的-setSelectedTextRange:方法并执行其中所需的任何其他行为。 (您可能会或可能不想确认范围实际上正在发生变化,具体取决于您的特定设计。)

答案 1 :(得分:0)

自iOS2起,UITextView的委托()符合此要求

-(void)textViewDidChangeSelection:(UITextView *)textView {
    //read textView.selectedRange
}

我个人也喜欢在关闭键盘时手动触发它,因为这也是我的选择更改,但不会自行触发委托回调(在我的拙见中,Apple对此不予理

-(void)textViewDidEndEditing:(UITextView *)textView {
    textView.selectedRange = NSMakeRange(0, 0);
    [self textViewDidChangeSelection:textView];
}