动态改变富⽂本字体的颜⾊
在使⽤富⽂本时(NSMutableAttributedString),看到都是固定的⼀堆字符串,然后去改变其中某⼏个字符的颜⾊、⼤⼩等等,这些
都还⽐较简单,但是很⼤情况下我们获得的数据并不是固定的,如果这时我们想让字体的颜⾊和⼤⼩随着后台返回数据的变化⽽变化,我们
应该怎么做呢?思路⼀样很简单,就是获得我们想要改变的字符,然后去赋值颜⾊和⼤⼩即可,不过由于字符是动态的,在获取该字符的
range时再采⽤传统的 NSRangeFromString()的⽅法已经获取不到该range,所以导致部分童靴明明设置了颜⾊和⼤⼩却并没有什么卵⽤
⽽急得抓⽿挠腮,那么解决办法来了,其实很简单,只需要这样做:
//获得想要改变字体颜⾊的range 在这⾥ model.rule_action_desc是从后台获取到的数据,由于“获得”字体和它相同,所以就拼到了⼀块
NSRange range1 = [integralString rangeOfString:[NSString stringWithFormat:@"%@获得",model.rule_action_desc] options:NSBackwardsSearch];
这样就获得了该range,看效果图:
再贴上我的富⽂本的代码:
//从后台获取的字符串,加上定制的“获得”
NSString *integralString = [NSString stringWithFormat:@"%@获得%@",model.rule_action_desc,model.rule_score];
//创建富⽂本
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:integralS
tring];
//设置字体⼤⼩
[attributedStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:13.0] range:NSMakeRange(0, attributedStr.string.length)];
//分别获得想要改变字体颜⾊的range
NSRange range1 = [integralString rangeOfString:[NSString stringWithFormat:@"%@获得",model.rule_action_desc] options:NSBackwardsSearch];
NSRange range2 = [integralString rangeOfString:[NSString stringWithFormat:@"%@",model.rule_score] options:NSBackwardsSearch];
//改变字体颜⾊
[attributedStr addAttribute:NSForegroundColorAttributeName value:UIColorFromRGB(0x333333) range:range1];
[attributedStr addAttribute:NSForegroundColorAttributeName value:UIColorFromRGB(0xff4c79) range:range2];
UILabel *integralScoreLabel = [[UILabel alloc] initWithFrame:CGRectMake(igin.x + timeLabel.frame.size.width + 30, igin //设置label的attributedText
integralScoreLabel.attributedText = attributedStr;