在使用富文本时(NSMutableAttributedString),看到都是固定的一堆字符串,而后去改变其中某几个字符的颜色、大小等等,这些都还比较简单,可是很大状况下咱们得到的数据并非固定的,若是这时咱们想让字体的颜色和大小随着后台返回数据的变化而变化,咱们应该怎么作呢?思路同样很简单,就是得到咱们想要改变的字符,而后去赋值颜色和大小便可,不过因为字符是动态的,在获取该字符的range时再采用传统的 NSRangeFromString()的方法已经获取不到该range,因此致使部分童靴明明设置了颜色和大小却并无什么卵用而急得抓耳挠腮,那么解决办法来了,其实很简单,只须要这样作:字体
//得到想要改变字体颜色的range 在这里 model.rule_action_desc是从后台获取到的数据,因为“得到”字体和它相同,因此就拼到了一块 NSRange range1 = [integralString rangeOfString:[NSString stringWithFormat:@"%@得到",model.rule_action_desc] options:NSBackwardsSearch];
这样就得到了该range,看效果图:code
再贴上个人富文本的代码:orm
//从后台获取的字符串,加上定制的“得到” NSString *integralString = [NSString stringWithFormat:@"%@得到%@",model.rule_action_desc,model.rule_score]; //建立富文本 NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:integralString]; //设置字体大小 [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(timeLabel.frame.origin.x + timeLabel.frame.size.width + 30, timeLabel.frame.origin.y, 120, timeLabel.frame.size.height)]; //设置label的attributedText integralScoreLabel.attributedText = attributedStr;