在项目中有的时候我们会用到同一个Lable,但是里面的文字却是不同一个颜色。在iOS 6 以后我们可以很轻松的实现这一点,官方的API 为我们提供了UILabel类的attributedText, 使用不同颜色和不同字体的字符串,我们可以使用NSAttributedText 和 NSMutableAttributedText 类来实现。
其中方法1:
<pre name="code" class="html">self.title = @"For iOS 6 & later";
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"Using NSAttributed String"];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,5)];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(6,12)];
[str addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(19,6)];
[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial-BoldItalicMT" size:30.0] range:NSMakeRange(0, 5)];
[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:30.0] range:NSMakeRange(6, 12)];
[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Courier-BoldOblique" size:30.0] range:NSMakeRange(19, 6)];
attrLabel.attributedText = str;
效果图:
方法2:
- (NSMutableAttributedString *)attrStrFrom:(NSString *)titleStr numberStr:(NSString *)numberStr
{
NSMutableAttributedString *arrString = [[NSMutableAttributedString alloc]initWithString:titleStr];
// 设置前面几个字串的格式:红色 13.0f字号
[arrString addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13.0f],NSForegroundColorAttributeName:[UIColor redColor]}range:[titleStr rangeOfString:numberStr]];
return arrString;
}
然后调用此方法:
//哪个字边颜色 numberStr就是哪个字
NSString *numberStr = [NSString stringWithFormat:@"【%@】",time];
/*
nameLabel2为创建的Label,
numberStr为要变色的字符串
*/
[nameLabel2 setAttributedText:[self attrStrFrom:[NSString stringWithFormat:@"请先选定取餐地点在选择菜品,如果取餐地点变\n更需要重新选菜。订餐结束时间【%@】",time] numberStr:numberStr]];
效果图: