背景
因此,在iOS 6中,UITextView可以采用attributedString,这对于语法突出显示很有用。
我在-textView:shouldChangeTextInRange:replacementText:
中做一些正则表达式模式,通常我需要更改已经键入的单词的颜色。除了重设attributedText,这没有其他选择,这需要花费时间。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
//A context will allow us to not call -attributedText on the textView, which is slow.
//Keep context up to date
[self.context replaceCharactersInRange:range withAttributedString:[[NSAttributedString alloc] initWithString:text attributes:self.textView.typingAttributes]];
// […]
self.textView.scrollEnabled = FALSE;
[self.context setAttributes:self.defaultStyle range:NSMakeRange(0, self.context.length)];
[self refresh]; //Runs regex-patterns in the context
textView.attributedText = self.context;
self.textView.selectedRange = NSMakeRange(range.location + text.length, 0);
self.textView.scrollEnabled = TRUE;
return FALSE;
}
这在模拟器上可以正常运行,但是在iPad 3上,每个
-setAttributedText
都需要花费几百毫秒的时间。我向Apple提出了一个错误,要求能够对attributedText进行突变。它被标记为重复,所以我看不到他们在说什么。
问题
更具体的问题:
如何在带有大的彩色文本的UITextView中更改某些范围的颜色,并且具有足以在每个
shouldReplaceText...
中执行的性能?更广泛的问题:
如何在iOS 6中使用UITextView突出显示语法?
最佳答案
attributedText访问器必须往返于HTML,因此对于语法突出显示的文本 View 实现而言,这并不是最佳选择。在iOS 6上,您可能需要直接使用CoreText。
关于UITextView attributedText和语法突出显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12543468/