通过UITextView中的NSMutableAttributedString为单词的特定范围着色导致UITextView滚动到顶部?

时间:2015-08-05 05:03:37

标签: ios objective-c uitextview nsmutableattributedstring contentoffset

这是一个UITextView,我在其上放了很长的章节(我想让它像书一样。),当我按下一个单词超过2秒时,(我在这里设置一个长手势),然后单词将会突出显示(下面的代码可以成功地突出显示单词,但也会触发我需要消除的一些副作用),然后是故事:

代码如下:

   NSMutableAttributedString *attrStr = [self.contentTextView.attributedText mutableCopy];
   [attrStr addAttribute:NSBackgroundColorAttributeName value:[UIColor grayColor] range: _wordToSearchRange ];
   self.contentTextView.attributedText = attrStr;

到目前为止,我调试了代码,最后针对这一行:

   self.contentTextView.attributedText = attrStr; 

它导致我的textView滚动到顶部(不停留在当前单词位置),这是合理的,因为此操作类似于刷新textView并为其设置全新内容。但是有没有其他方法在textView中设置特定的单词范围,这不会导致这个?

任何帮助都会很棒!很多!

1 个答案:

答案 0 :(得分:0)

由于您正在编辑现有文本,因此不应替换所有文本。 您需要创建属性字典并将其添加到属性文本中:

NSMutableDictionary* attributes; //set the wanted attributes
NSRange range; //set the right range

[_contentTextView.textStorage beginEditing];
[_contentTextView.textStorage addAttributes:attributes range:range];
[_contentTextView.textStorage endEditing];