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

Ios 在特定情况下更改文本颜色,ios,objective-c,iphone,uitextview,nsattributedstring,Ios,Objective C,Iphone,Uitextview,Nsattributedstring,我正在使用此方法将UITextView的颜色更改为几个字符 +(void)changeColorToTextObject : (UITextView *)textView ToColor : (UIColor *)color FromLocation : (int)location WithLength : (int)length { NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWith

我正在使用此方法将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
”属性中,并在使用“
changeColorToTextObject
”方法后将其分配给
UITextView

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

在您的情况下,我将首先在
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/COD>的动态行为进行更多的控制(如果您是“iOS 7”),则应该考虑使用文本工具包,特别是子类。有一个,还有一个