如何动态设置NSString中存在的数字和单词的不同颜色。
我需要这个而不使用其他类。使用NSAttributedString有没有简单的方法。我需要这个用于UILabel。
例如: 1 球, 1 球棒, 3 树桩, 4 手套,...... n。等*
我想要一种颜色的计数和其他颜色的项目名称。任何帮助表示赞赏。
答案 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"]];