如何在UITextView委托方法中设置setAttributedText时停止光标改变位置textViewDidChange
问题描述:
以下代码将textView字符串中的“test”更改为红色,但它也具有将光标移动到文本块末尾的效果,当textViewDidChange被称为(当任何文本编辑时,这是非常烦人的)。如何在UITextView委托方法中设置setAttributedText时停止光标改变位置textViewDidChange
当我在textViewDidChange中setAttributedText时,如何防止光标移动?
- (void)textViewDidChange:(UITextView *)textView {
NSString* currentString = self.textView.text;
NSMutableAttributedString* string = [[NSMutableAttributedString alloc]initWithString:currentString];
NSArray *words=[currentString componentsSeparatedByString:@" "];
for (NSString *word in words) {
if ([word isEqualToString:@"test"]) {
// change color
NSRange range=[currentString rangeOfString:word];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:range];
}
}
// assign new color to textView's text
[self.textView setAttributedText:string];
}
答
简单地保存和恢复所选择的范围:
NSRange selectedRange = self.textView.selectedRange;
self.textView.attributedText = string;
self.textView.selectedRange = selectedRange;
+0
它的工作原理!非常感谢! – KarlHarnois
仅供参考 - 你的代码只有永远也找不到的“测试”中第一次出现。 – rmaddy
是的,这是我想解决的另一件事:P – KarlHarnois