附加NSString后保留textView文本的颜色

时间:2015-03-24 14:57:24

标签: ios objective-c iphone nsmutableattributedstring

我正在使用下一个方法来更改textView中几个单词的颜色:

+(void)changeColorToTextObject : (UITextView *)textView ToColor : (UIColor *)color FromLocation : (int)location length : (int)length
{
    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString: textView.attributedText];

    [text addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(location, length)];
    [textView setAttributedText: text];
}

它看起来像这样: enter image description here

但是当我为这段文字添加新值时,颜色就消失了。

myTextView.text = [myTextView.text stringByAppendingString:newStr];

它看起来像这样:

enter image description here

如何使用新字符串保持以前的颜色?

1 个答案:

答案 0 :(得分:1)

而不是myTextView.text = [myTextView.text stringByAppendingString:newStr];使用:

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString:myTextView.attributedText];
NSAttributedString *newAttrString = [[NSAttributedString alloc] initWithString:newStr];
[text appendAttributedString:newAttrString];
myTextView.attributedText = text;

您的代码无效,因为您要为text的{​​{1}}属性分配新字符串。 myTextView只是一个text属性,因此无法显示可以使用NSString显示的颜色或其他内容。

请注意,编写NSAttributedString会调用属性 myTextView.attributedText = text; setter ,因此100%等同于attributedText,另一种表示法。