给UIButton增加下划线,改变某个范围文字的颜色
2016-05-30 本文已影响2168人
WenJim
通过NSMutableAttributedString修改某个范围内的属性
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。
自己在网上找了一下,看到部分大神使用NSMutableAttributedString来修改,我也就去了解了一下,下面是部分属性(网上找到的)
1.实例化方法和使用方法
实例化方法:
//使用字符串初始化
- (id)initWithString:(NSString *)str;
例:
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"还没有账号,去注册"];
- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;
字典中存放一些属性名和属性值,如:
NSDictionary *attributeDict = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont systemFontOfSize:15.0],NSFontAttributeName,
[UIColor redColor],NSForegroundColorAttributeName,
NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];
NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:@"还没有账号,去注册" attributes:attributeDict];
- (id)initWithAttributedString:(NSAttributedString *)attester;
//使用NSAttributedString初始化,跟NSMutableString,NSString类似
使用方法:
//为某一范围内文字设置多个属性
- (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;
2.常见的属性及说明
NSFontAttributeName 字体
NSParagraphStyleAttributeName 段落格式
NSForegroundColorAttributeName 字体颜色
NSBackgroundColorAttributeName 背景颜色
NSStrikethroughStyleAttributeName 删除线格式
NSUnderlineStyleAttributeName 下划线格式
NSStrokeColorAttributeName 删除线颜色
NSStrokeWidthAttributeName 删除线宽度
NSShadowAttributeName 阴影
更多方法和属性说明详见苹果官方说明文档:
苹果官方文档
3.实例
/**
* 通过 NSMutableAttributedString 实现富文本
*/
NSString * oneStr = @"还没有账号,去注册";
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",oneStr]];
//修改某个范围内的字体大小
[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Arial-BoldItalicMT" size:16.0] range:NSMakeRange(7,2)];
//修改某个范围内字的颜色
[str addAttribute:NSForegroundColorAttributeName value:GLColor(62, 190, 219, 1) range:NSMakeRange(7,2)];
//在某个范围内增加下划线
[str addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(0, [str length])];
UIButton * registerUsers = [UIButton buttonWithType:UIButtonTypeCustom];
registerUsers.frame = CGRectMake(self.view.centerX - 75, SCREENHEIGHT - 64 -50 - 20, 150, 50);
registerUsers.titleLabel.textAlignment = NSTextAlignmentCenter;
registerUsers.titleLabel.font = [UIFont systemFontOfSize:12];
[registerUsers setAttributedTitle:str forState:UIControlStateNormal];
[registerUsers addTarget:self action:@selector(setregisterUsers:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:registerUsers];
运行效果:
实例运行效果.png
这只是简单的纪录一下,以后会继续填充(对了,暂时发现可以用于 UITextField 和 UILabel 上)