有没有办法检测用户何时更改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的委托方法
答案 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];
}