8

有没有办法检测用户何时更改文本视图中所选文本的范围(在 UITextView 的子类中)?我找不到任何 NSNotification。我尝试观察键值,但未调用所选范围的观察者

[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 的委托方法

4

2 回答 2

12

UITextView采用UITextInput协议。该协议包括必需的selectedTextRange读/写属性。那是您要响应更改的属性。

虽然您可以观察到该属性,但最简单的方法是覆盖-setSelectedTextRange:子类中的方法并在其中执行您需要的任何其他行为。(根据您的特定设计,您可能想要也可能不想确认范围实际上正在改变。)

于 2013-07-27T17:27:16.920 回答
1

UITextView的delegate()从iOS2开始就符合这个

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

我个人也喜欢在关闭键盘时手动触发它,因为这也是我认为的选择更改,但不会自行触发委托回调(在我的拙见中忽略了 Apple 的部分)

-(void)textViewDidEndEditing:(UITextView *)textView {
    textView.selectedRange = NSMakeRange(0, 0);
    [self textViewDidChangeSelection:textView];
}
于 2020-02-29T23:00:53.923 回答