这一定是一件容易的事,但我无法弄清楚。

我有一个NSMutableAttributedString,例如,其中有“This is a test”。我想将“测试”一词涂成蓝色,为此:

NSMutableAttributedString *coloredText = [[NSMutableAttributedString alloc] initWithString:@"This is a test"];

[coloredText addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(10,4)];

那很好。但是现在,对于任何在“测试”之后键入的内容,我都希望将其文本颜色重新设置为黑色。

如果我做:
[coloredText addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(coloredText.string.length, 1)];

我得到一个objectAtIndex:effectiveRange:超出范围错误。可能是因为范围超出了字符串的长度。

如果我做:
[coloredText addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(coloredText.string.length, 0)];

错误消失了,但是在单词“test”之后键入仍然是蓝色。

当字符串位于字符串的末尾时,如何在插入点设置当前颜色?

为任何输入加油。

最佳答案

如果文本更改,则需要重新计算属性,因为它们的有效范围不会随文本的长度自动更改。

10-06 02:33