一群程序猿的秘密基地iOS开发技巧

给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 上)

上一篇下一篇

猜你喜欢

热点阅读