背景
因此,在 iOS 6 中,UITextView 可以采用属性字符串,这对于语法突出显示很有用。
我正在做一些正则表达式模式,-textView:shouldChangeTextInRange:replacementText:
并且经常需要更改已经输入的单词的颜色。除了重置属性文本之外,我没有看到其他选择,这需要时间。
- (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 提交了一个错误,要求能够改变属性文本。它被标记为重复,所以我看不到他们在说什么。
问题
更具体的问题:
如何更改 UITextView 中某些范围的颜色,使用大的彩色文本,并具有足够好的性能来做到这一点shouldReplaceText...
?
更广泛的问题: 如何在 iOS 6 中使用 UITextView 进行语法高亮?