在特定情况下更改文本颜色

Change text color in specific situation

我正在使用此方法将颜色更改为我的 UITextView 的几个字符

+(void)changeColorToTextObject : (UITextView *)textView ToColor : (UIColor *)color FromLocation : (int)location WithLength : (int)length
{
    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString: textView.attributedText];
    [text addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(location, length)];
    [textView setAttributedText: text];
}

效果很好,但在我更改特定范围后,我希望能够继续使用之前的颜色,而不是我刚刚更改的新颜色。 我该怎么做?

在将 attributedText 应用到 UITextView 之前,将您之前的颜色保存到 'UIColor' 属性 中,然后将其分配给 UITextView使用“changeColorToTextObject”方法。

实际上,在处理属性文本时,我发现最好的做法是先设置内容,然后再设置样式(这实际上源自旧的排版规则)。

在您的情况下,我会首先在 UITextView 上设置整个文本,然后调用方法 changeColorToTextObject:ToColor:FromLocation:WithLength 仅指定您想要的不同颜色的文本部分。

但是,如果您不是在谈论静态内容,而是像文字处理器应用这样的东西,用户可以在其中更改文本颜色并在之后继续书写,那么您需要考虑您希望此应用如何工作.考虑以下方法:

- (void)highlightSelectedText {    
    UIColor *highlightColor = [UIColor redColor];

    [self changeColorToTextObject:self.textView ToColor:highlightColor FromLocation:self.textView.selectedRange.location WithLength:self.textView.selectedRange.length];
}

此方法可让您突出显示文本的特定部分,用户当前已选择:

如果用户继续输入,新文本将显示为红色:

如果相反,他们将焦点放在字体颜色为黑色的地方,他们将继续用黑色书写:

当您想到文字处理器时,它似乎非常熟悉。如果这对您来说足够好,那么您就可以开始了。 当没有选择文本时,您唯一需要担心的边框大小写就是您的操作。

但是,如果您需要更多地控制 UITextView 的动态行为(如果您是 >iOS 7),您应该考虑使用 Text Kit,尤其是子类化 NSTextStorage. There is a introduction video to Text Kit from WWDC 2013, and a great tutorial by Ray Wenderlich.