我使用此方法将颜色更改为我的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];
}
它工作得很好但是在我改变特定范围后,我希望能够继续使用之前的颜色,而不是我刚才改变的新颜色。 我该怎么办?
答案 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];
}
此方法允许您突出显示用户当前选择的文本的特定部分:
如果用户继续输入,则新文本将显示为红色:
如果相反,他们将焦点放在字体颜色为黑色的地方,他们将继续以黑色书写:
当你想到一个文字处理器时,这看起来真的很熟悉。如果这对你来说足够好,那么你很高兴。 当你没有选择任何文字时,你需要担心的唯一边界案例是你做的。
但是,如果您需要更好地控制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
。方法