2013-05-06 51 views
2

我试图在我的应用程序中创建文本视图。它只是突出显示语法并通过AttributedText在UITextView中显示突出显示的文本。这里是代码:替换部分UITextView的归属文本

NSMutableString *ms = [[NSMutableString alloc] initWithString:self.text]; 
[ms replaceCharactersInRange:range withString:text]; 
self.attributedText = [syntaxHighlighter highlight:ms inRange:[self visibleRangeOfText]]; 
[self setSelectedRange:NSMakeRange(range.location + text.length, 0)]; 

问题是对于大文本,它必须替换第三行中的整个文本。 有没有办法在不替换整个内容的情况下替换部分文本?

+0

这看起来是相关的:http://stackoverflow.com/questions/12543468/uitextview-attributetext-and-syntax-highlighting?rq=1 – rmaddy 2013-05-06 03:09:15

回答

2

UITextView执行UITextInput协议。

如果要替换文本的一部分,而无需更换整个内容,您可以使用方法:

- (void)replaceRange:(UITextRange *)range withText:(NSString *)text; 

但在某些特殊情况下(从其他类调用时),这种方法是无效的。我不知道为什么所以我用:

double delayInSeconds = 0.2; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    //call method to change text of textView here... 
}); 

祝你好运!

+3

目标是改变'属性文字',而不是'文本' 。 – rmaddy 2013-05-06 03:26:17

+0

@rmaddy是对的。这对替换纯文本很有帮助,但它将消除格式化! – 2013-05-06 13:41:27