如何将UIcolor分配给NSString?

时间:2016-06-18 05:58:57

标签: ios objective-c uitableview nsstring uicolor

我有字典数组

[
        {
          "price": 0,
          "test_name": "Multislice CT Scan Virtual Bronchoscopy"
        },
        {
          "price": 0,
          "test_name": "Multislice CT Scan Dental"
        },
        {
          "price": 0,
          "test_name": "Multislice CT Scan Joint (3D)"
        },
        {
          "price": 0,
          "test_name": "Multislice CT Scan Lumbar"
        },
        {
          "price": 0,
          "test_name": "Multislice CT Scan Spine - Cervical / Thoracic"
        },
        {
          "price": 0,
          "test_name": "Multislice CT Scan CT Urography"
        }
]

并且正在将此Dictionary数组转换为NSString,方法是在每个字典值的末尾添加\ n

Multislice CT Scan Virtual Bronchoscopy  
Rs.0

Multislice CT Scan Dental  
Rs.0

Multislice CT Scan Joint (3D)  
Rs.0

Multislice CT Scan Lumbar  
Rs.0

Multislice CT Scan Spine - Cervical / Thoracic  
Rs.0

Multislice CT Scan CT Urography  
Rs.0

Multislice CT Scan (Arterial + Portal + Venous)  
Rs.0

Multislice CT Scan Abdomen Triphasic Lever  
Rs.0

现在我想在redColor中使用 Rs.0 字符串...如何为该特定字符串提供红色???

使用静态表..将整个字符串分配给单个标签..

5 个答案:

答案 0 :(得分:2)

  

NSMutableAttributedString你要找的东西。

试试这个和示例代码

 NSString *strFirst = @"Multislice CT Scan Virtual Bronchoscopy";
    NSString *strSecond = @"Rs.0";


    NSString *strComplete = [NSString stringWithFormat:@"%@ %@",strFirst,strSecond];

    NSMutableAttributedString *attributedString =[[NSMutableAttributedString alloc] initWithString:strComplete];
    //you can change your string color as your need like below
    [attributedString addAttribute:NSForegroundColorAttributeName
                             value:[UIColor blackColor]
                             range:[strComplete rangeOfString:strFirst]];

    [attributedString addAttribute:NSForegroundColorAttributeName
                             value:[UIColor redColor]
                             range:[strComplete rangeOfString:strSecond]];



    self.yourLbl.attributedText = attributedString;

答案 1 :(得分:2)

您可以在iOS 6及更高版本中使用NSMutableAttributedString。

示例代码:

    NSString *strFirst = @"Multislice CT Scan Virtual Bronchoscopy";
    NSString *strSecond = @"Rs.0";

    NSString *strComplete = [NSString stringWithFormat:@"%@\n %@",strFirst,strSecond];

    NSMutableAttributedString *attributedString =[[NSMutableAttributedString alloc] initWithString:strComplete];

    [attributedString addAttribute:NSForegroundColorAttributeName
                  value:[UIColor redColor]
                  range:[strComplete rangeOfString:strSecond]];


   cell.textLabel.attributedText = attributedString;

答案 2 :(得分:1)

尝试使用此类似的东西,你的所有Rs.0将显示为红色

NSString *str = @"Multislice CT Scan Virtual Bronchoscopy Rs.0 Multislice CT Scan Dental Rs.0";

NSMutableAttributedString *attributedString =[[NSMutableAttributedString alloc] initWithString:str];

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(Rs.[0-9]*)" options:kNilOptions error:nil];

NSRange range = NSMakeRange(0,strFirst.length);

[regex enumerateMatchesInString:strFirst options:kNilOptions range:range usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

    NSRange subStringRange = [result rangeAtIndex:1];
    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:subStringRange];
}];
self.label.attributedText = attributedString;

希望这会对你有所帮助。

答案 3 :(得分:0)

使用此方法:

-(UIColor *)giveColorfromStringColor:(NSString *)colorname
{
    SEL labelColor = NSSelectorFromString(colorname);
    UIColor *color = [UIColor performSelector:labelColor];
    return color;
}

答案 4 :(得分:0)

试试此代码

- (NSString *)stringFromColor:(UIColor *)color
{
    const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor);
    const CGFloat * components = CGColorGetComponents(color.CGColor);
    return [NSString stringWithFormat:@"#%02X%02X%02X",
            (int)(255 * components[MIN(0,totalComponents-2)]),
            (int)(255 * components[MIN(1,totalComponents-2)]),
            (int)(255 * components[MIN(2,totalComponents-2)])];
}