iOS UI基础-17.0 UILable之NSMutableAttributedString
2015-12-03 23:21 jiangys 阅读(3688) 评论(0) 编辑 收藏 举报在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。
NSMuttableAttstring 方法
为某一范围内文字设置多个属性
- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;
为某一范围内文字添加某个属性
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
为某一范围内文字添加多个属性
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
移除某范围内的某个属性
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
常见的属性及说明
NSFontAttributeName 字体
NSParagraphStyleAttributeName 段落格式
NSForegroundColorAttributeName 字体颜色
NSBackgroundColorAttributeName 背景颜色
NSStrikethroughStyleAttributeName 删除线格式
NSUnderlineStyleAttributeName 下划线格式
NSStrokeColorAttributeName 删除线颜色
NSStrokeWidthAttributeName 删除线宽度
NSShadowAttributeName 阴影
例子一:
UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 30)]; testLabel.backgroundColor = [UIColor lightGrayColor]; testLabel.textAlignment = NSTextAlignmentCenter; NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"今天天气不错呀"]; [AttributedStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0] range:NSMakeRange(2, 2)]; [AttributedStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(2, 2)]; testLabel.attributedText = AttributedStr; [self.view addSubview:testLabel];
效果:
例子二:
UILabel *titleView = [[UILabel alloc] init]; titleView.width = 200; titleView.height = 100; titleView.textAlignment = NSTextAlignmentCenter; // 自动换行 titleView.numberOfLines = 0; titleView.y = 50; NSString *str = [NSString stringWithFormat:@"%@\n%@", prefix, name]; // 创建一个带有属性的字符串(比如颜色属性、字体属性等文字属性) NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:str]; // 添加属性 [attrStr addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:16] range:[str rangeOfString:prefix]]; [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12] range:[str rangeOfString:name]]; titleView.attributedText = attrStr;
例子二中,range:[str rangeOfString:name] 找到name 有str 所在的范围。
删除:
NSString *marketPrice = [NSString stringWithFormat:@"¥%d",4302]; NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:marketPrice]; [attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, marketPrice.length)];
文字换行
UILabel *tips = [[UILabel alloc]initWithFrame:CGRectMake(20, 16, kScreenWidth - 20, 45)]; [tips setTextColor:[UIColor grayColor]]; [tips setText:@"支付密码必须为6位数字组合。\n您可依次进入 '功能列表' -> '安全中心' 修改支付密码。"]; [tips setFont:[UIFont boldSystemFontOfSize:12]]; tips.textAlignment = NSTextAlignmentLeft; tips.numberOfLines = 0; // 关键一句
参考博客:http://snowyshell.blog.163.com/blog/static/2209140342014475383375/