Ios 在特定情况下更改文本颜色
我正在使用此方法将UITextView的颜色更改为几个字符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
+(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”),则应该考虑使用文本工具包,特别是子类。有一个,还有一个