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

时间:2015-03-16 10:21:59

标签: ios objective-c iphone uitextview nsattributedstring

我使用此方法将颜色更改为我的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];
}

它工作得很好但是在我改变特定范围后,我希望能够继续使用之前的颜色,而不是我刚才改变的新颜色。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

实际上,在使用属性文本时,我发现最佳做法是先设置内容,然后设置第二种(实际上源于旧的排版规则)。

在您的情况下,我首先在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];
}

此方法允许您突出显示用户当前选择的文本的特定部分:

enter image description here

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

enter image description here

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

enter image description here

当你想到一个文字处理器时,这看起来真的很熟悉。如果这对你来说足够好,那么你很高兴。 当你没有选择任何文字时,你需要担心的唯一边界案例是你做的。

但是,如果您需要更好地控制UITextView的动态行为(如果您是> iOS 7),则应考虑使用Text Kit,特别是子类化NSTextStorage。有一个introduction video to Text Kit from WWDC 2013和一个great tutorial by Ray Wenderlich

答案 1 :(得分:0)

将以前的颜色保存到&{39; UIColor'将attributedText应用于UITextView之前的属性,并在使用&{39; UITextView'之后将其分配给changeColorToTextObject。方法