UILabel有两种不同颜色的文字

Pet*_*ter 107 objective-c textcolor uilabel ios swift

我想在以下内容中显示如下字符串UILabel:

有5个结果.

数字5的颜色为红色,其余字符串为黑色.

我怎么能在代码中这样做?

小智 221

这样做的方法是这样使用NSAttributedString:

NSMutableAttributedString *text = 
 [[NSMutableAttributedString alloc] 
   initWithAttributedString: label.attributedText];

[text addAttribute:NSForegroundColorAttributeName 
             value:[UIColor redColor] 
             range:NSMakeRange(10, 1)];
[label setAttributedText: text];
Run Code Online (Sandbox Code Playgroud)

我创建了一个UILabel 扩展来做到这一点.


ano*_*eal 58

我通过创建一个categoryfor来做到这一点NSMutableAttributedString

-(void)setColorForText:(NSString*) textToFind withColor:(UIColor*) color
{
    NSRange range = [self.mutableString rangeOfString:textToFind options:NSCaseInsensitiveSearch];

    if (range.location != NSNotFound) {
        [self addAttribute:NSForegroundColorAttributeName value:color range:range];
    }
}
Run Code Online (Sandbox Code Playgroud)

像它一样使用它

- (void) setColoredLabel
{
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Here is a red blue and green text"];
    [string setColorForText:@"red" withColor:[UIColor redColor]];
    [string setColorForText:@"blue" withColor:[UIColor blueColor]];
    [string setColorForText:@"green" withColor:[UIColor greenColor]];
    mylabel.attributedText = string;
}
Run Code Online (Sandbox Code Playgroud)

SWIFT 3

extension NSMutableAttributedString{
    func setColorForText(_ textToFind: String, with color: UIColor) {
        let range = self.mutableString.range(of: textToFind, options: .caseInsensitive)
        if range.location != NSNotFound {
            addAttribute(NSForegroundColorAttributeName, value: color, range: range)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

func setColoredLabel() {
    let string = NSMutableAttributedString(string: "Here is a red blue and green text")
    string.setColorForText("red", with: #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1))
    string.setColorForText("blue", with: #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1))
    string.setColorForText("green", with: #colorLiteral(red: 0.3411764801, green: 0.6235294342, blue: 0.1686274558, alpha: 1))
    mylabel.attributedText = string
}
Run Code Online (Sandbox Code Playgroud)

SWIFT 4 @ kj13感谢您的通知

// If no text is send, then the style will be applied to full text
func setColorForText(_ textToFind: String?, with color: UIColor) {

    let range:NSRange?
    if let text = textToFind{
        range = self.mutableString.range(of: text, options: .caseInsensitive)
    }else{
        range = NSMakeRange(0, self.length)
    }
    if range!.location != NSNotFound {
        addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range!)
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经对属性做了更多实验,下面是结果,这里是 SOURCECODE

这是结果

样式

  • 您需要使用方法为NSMutableAttributedString创建一个新类别...无论如何我将此示例添加到github,您可以抓取并检查它https://github.com/anoop4real/NSMutableAttributedString-Color (2认同)

Har*_*ora 25

干得好

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:lblTemp.text];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
lblTemp.attributedText = string;
Run Code Online (Sandbox Code Playgroud)


Kru*_*nal 17

斯威夫特4

// An attributed string extension to achieve colors on text.
extension NSMutableAttributedString {

    func setColor(color: UIColor, forText stringValue: String) {
       let range: NSRange = self.mutableString.range(of: stringValue, options: .caseInsensitive)
       self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
    }

}

// Try it with label
let label = UILabel()
label.frame = CGRect(x: 70, y: 100, width: 260, height: 30)
let stringValue = "There are 5 results."
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColor(color: UIColor.red, forText: "5")
label.font = UIFont.systemFont(ofSize: 26)
label.attributedText = attributedString
self.view.addSubview(label)
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述


斯威夫特3

func setColoredLabel() {
        var string: NSMutableAttributedString = NSMutableAttributedString(string: "redgreenblue")
        string.setColor(color: UIColor.redColor(), forText: "red")
        string.setColor(color: UIColor.greenColor(), forText: "green")
        string.setColor(color: UIColor.blueColor(, forText: "blue")
        mylabel.attributedText = string
    }


func setColor(color: UIColor, forText stringValue: String) {
        var range: NSRange = self.mutableString.rangeOfString(stringValue, options: NSCaseInsensitiveSearch)
        if range != nil {
            self.addAttribute(NSForegroundColorAttributeName, value: color, range: range)
        }
    }
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


小智 12

//NSString *myString = @"I have to replace text 'Dr Andrew Murphy, John Smith' ";
NSString *myString = @"Not a member?signin";

//Create mutable string from original one
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:myString];

//Fing range of the string you want to change colour
//If you need to change colour in more that one place just repeat it
NSRange range = [myString rangeOfString:@"signin"];
[attString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:(63/255.0) green:(163/255.0) blue:(158/255.0) alpha:1.0] range:range];

//Add it to the label - notice its not text property but it's attributeText
_label.attributedText = attString;
Run Code Online (Sandbox Code Playgroud)


Tri*_*ops 6

iOS 6开始,UIKit支持绘制属性字符串,因此不需要扩展或替换.

来自UILabel:

@property(nonatomic, copy) NSAttributedString *attributedText;
Run Code Online (Sandbox Code Playgroud)

你只需要建立你的NSAttributedString.基本上有两种方式:

  1. 附加具有相同属性的文本块 - 为每个部分创建一个NSAttributedString实例并将它们附加到一个实例NSMutableAttributedString

  2. 从普通字符串创建属性文本,然后为给定范围添加属性 - 找到您的数字范围(或其他)并在其上应用不同的颜色属性.


Dee*_*kur 6

Anups迅速回答.可以从任何类重用.

在swift文件中

extension NSMutableAttributedString {

    func setColorForStr(textToFind: String, color: UIColor) {

        let range = self.mutableString.rangeOfString(textToFind, options:NSStringCompareOptions.CaseInsensitiveSearch);
        if range.location != NSNotFound {
            self.addAttribute(NSForegroundColorAttributeName, value: color, range: range);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

在一些视图控制器中

let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.labelShopInYourNetwork.text!);
attributedString.setColorForStr("YOUR NETWORK", color: UIColor(red: 0.039, green: 0.020, blue: 0.490, alpha: 1.0));
self.labelShopInYourNetwork.attributedText = attributedString;
Run Code Online (Sandbox Code Playgroud)


wer*_*ner 3

NSAttributedString是要走的路。下面的问题有一个很好的答案,向您展示如何做到这一点如何使用 NSAttributedString