如何在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]; 
} 
+0

仅供参考 - 你的代码只有永远也找不到的“测试”中第一次出现。 – rmaddy

+0

是的,这是我想解决的另一件事:P – KarlHarnois

简单地保存和恢复所选择的范围:

NSRange selectedRange = self.textView.selectedRange; 
self.textView.attributedText = string; 
self.textView.selectedRange = selectedRange; 
+0

它的工作原理!非常感谢! – KarlHarnois