如何动态设置NSString中存在的数字的不同颜色

时间:2014-02-06 14:48:49

标签: ios objective-c nsstring uilabel nsattributedstring

如何动态设置NSString中存在的数字和单词的不同颜色。

我需要这个而不使用其他类。使用NSAttributedString有没有简单的方法。我需要这个用于UILabel。

例如: 1 球, 1 球棒, 3 树桩, 4 手套,...... n。等*

我想要一种颜色的计数和其他颜色的项目名称。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

您可以使用NSRegularExpression在文本中查找数字,然后只需在属性字符串中添加属性:

    NSString *testString = @"1 ball, 1 bat, 3 stumps, 4 Gloves";
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:testString];

    NSRange   searchedRange = NSMakeRange(0, [testString length]);
    NSString *pattern = @"\\d+";
    NSError  *error = nil;

    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];

    NSArray* matches = [regex matchesInString:testString options:0 range: searchedRange];
    for (NSTextCheckingResult* match in matches)
    {
        NSString* matchText = [testString substringWithRange:[match range]];
        [attStr addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:16] range:[match range]];
        NSLog(@"Match: %@", matchText);
    }
    UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(10, 300, 300, 30)];
    lab.attributedText = attStr;
    [self.view addSubview:lab];

答案 1 :(得分:1)

使用NSAttributedString实际上是使用不同的类:)但是我建议你使用NSMutableAttributedString进行准备,然后存储非可变版本,因为它易于阅读。无论如何,一些未经测试的代码应如下所示:

NSMutableAttributedString* message = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"1 word 2 word"] attributes:nil];
[message addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, 1)];
[message addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(8, 1)];

此外,您可以使用所需属性直接附加NSAttributedString,而不是使用范围设置它们:

    NSMutableAttributedString* message = [[NSMutableAttributedString alloc] init];
//set text
[message appendAttributedString:[[NSAttributedString alloc] initWithString:@"1" attributes:@{
                                                                                             NSFontAttributeName : [UIColor greenColor]
                                                                                             }]];
[message appendAttributedString:[[NSAttributedString alloc] initWithString:@" word"]];

[message appendAttributedString:[[NSAttributedString alloc] initWithString:@"2" attributes:@{
                                                                                             NSFontAttributeName : [UIColor redColor]
                                                                                             }]];
[message appendAttributedString:[[NSAttributedString alloc] initWithString:@" word"]];