TTTAttributedLabel简单使用

TTTAttributedLabel 是一个常用的富文本开源库,支持各种属性文本、数据探测器,链接等。
下面我们来看看它的用法。

TTTAttributedLabel 创建:


- (TTTAttributedLabel *)aLable
{
    if (!_aLable)
    {
        _aLable = [[TTTAttributedLabel alloc] initWithFrame:CGRectMake(10, 80, SCREEN_WIDTH - 20, SCREEN_HEIGHT - 200)];
        _aLable.backgroundColor = RGBCOLOR(246, 246, 246);
        _aLable.lineBreakMode = NSLineBreakByWordWrapping;
        _aLable.numberOfLines = 0;
        _aLable.delegate = self;
        _aLable.lineSpacing = 10;
        //要放在`text`, with either `setText:` or `setText:afterInheritingLabelAttributesAndConfiguringWithBlock:前面才有效
        _aLable.enabledTextCheckingTypes = NSTextCheckingTypePhoneNumber|NSTextCheckingTypeAddress|NSTextCheckingTypeLink;
        //链接正常状态文本属性
        _aLable.linkAttributes = @{NSForegroundColorAttributeName:[UIColor purpleColor],NSUnderlineStyleAttributeName:@(1)};
        //链接高亮状态文本属性
        _aLable.activeLinkAttributes = @{NSForegroundColorAttributeName:[UIColor blackColor],NSUnderlineStyleAttributeName:@(1)};
        
    }
    return _aLable;
}

注:enabledTextCheckingTypes要放在text, with either setText: or setText:afterInheritingLabelAttributesAndConfiguringWithBlock:前面才有效.

文本赋值


NSString *text = DaoXiang;
__block CGSize size;

[self.aLable setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
    
    NSRange fontRange         = [[mutableAttributedString string] rangeOfString:@"对这个世界如果你有太多的抱怨"
                                                                        options:NSCaseInsensitiveSearch];
    
    NSRange strokeColorRange1 = [[mutableAttributedString string] rangeOfString:@"跌倒了 就不敢继续往前走"
                                                                        options:NSCaseInsensitiveSearch];
    
    NSRange strikeRange       = [[mutableAttributedString string] rangeOfString:@"为什麼 人要这麼的脆弱 堕落"
                                                                        options:NSCaseInsensitiveSearch];
    
    NSRange fillColorRange    = [[mutableAttributedString string] rangeOfString:@"请你打开电视看看"
                                                                        options:NSCaseInsensitiveSearch];
    
    NSRange shadowRange       = [[mutableAttributedString string] rangeOfString:@"为生命在努力勇敢的走下去"
                                                                        options:NSCaseInsensitiveSearch];
    
    NSRange obliquenessRange  = [[mutableAttributedString string] rangeOfString:@"还记得你说家是唯一的城堡"
                                                                        options:NSCaseInsensitiveSearch];
    
    
    UIEdgeInsets fillPadding  = UIEdgeInsetsMake(0, 0, 0, 0);
    
    
    
    
    // Core Text APIs use C functions without a direct bridge to UIFont. See Apple's "Core Text Programming Guide" to learn how to configure string attributes.
    UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:16];
    CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL);
    
    if (font) {
        
        {
            //字体
            [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName
                                            value:(__bridge id)font
                                            range:fontRange];
            //文字颜色
            [mutableAttributedString addAttribute:(NSString *)kCTForegroundColorAttributeName
                                            value:[UIColor redColor]
                                            range:fontRange];
            CFRelease(font);
            
            
        }
        
        {
            //NSStrokeColorAttributeName设置文字描边颜色,需要和NSStrokeWidthAttributeName设置描边宽度,这样就能使文字空心
            //文字描边颜色
            [mutableAttributedString addAttribute:NSStrokeColorAttributeName
                                            value:[UIColor blueColor]
                                            range:strokeColorRange1];
            //文字描边宽度
            [mutableAttributedString addAttribute:NSStrokeWidthAttributeName
                                            value:@(2.0)
                                            range:strokeColorRange1];
            
        }
        
        {
            //删除样式
            [mutableAttributedString addAttribute:kTTTStrikeOutAttributeName
                                            value:@YES
                                            range:strikeRange];
            
            //加上下划线
            [mutableAttributedString addAttribute:NSUnderlineStyleAttributeName
                                            value:[NSNumber numberWithInt:3]
                                            range:strikeRange];
            [mutableAttributedString addAttribute:NSUnderlineColorAttributeName
                                            value:[UIColor greenColor]
                                            range:strikeRange];
        }
        
        {
            //背景色
            [mutableAttributedString addAttribute:kTTTBackgroundFillColorAttributeName
                                            value:[UIColor purpleColor]
                                            range:fillColorRange];
            //控制背景色范围
            [mutableAttributedString addAttribute:kTTTBackgroundFillPaddingAttributeName
                                            value:[NSNumber valueWithUIEdgeInsets:fillPadding]
                                            range:fillColorRange];
            //控制背景色(文字边框)的圆角
            [mutableAttributedString addAttribute:kTTTBackgroundCornerRadiusAttributeName
                                            value:@(4)
                                            range:fillColorRange];
            
            //文字边框颜色
            [mutableAttributedString addAttribute:kTTTBackgroundStrokeColorAttributeName
                                            value:[UIColor purpleColor]
                                            range:fillColorRange];
        }
        
        {
            //无效
            NSShadow *shadow = [[NSShadow alloc] init];
            [shadow setShadowColor:[UIColor redColor]];
            [shadow setShadowBlurRadius:4.0];
            [shadow setShadowOffset:CGSizeMake(2, 2)];
            //阴影
            [mutableAttributedString addAttribute:NSShadowAttributeName
                                            value:shadow
                                            range:shadowRange];
        }
        
        {
            //无效
            //斜体
            //NSObliquenessAttributeName 设置字体倾斜度,取值为 NSNumber(float),正值右倾,负值左倾
            [mutableAttributedString addAttribute:NSObliquenessAttributeName
                                            value:@(5.0)
                                            range:obliquenessRange];
        }
    }
    
    //高度计算
    size = [TTTAttributedLabel sizeThatFitsAttributedString:mutableAttributedString
                                            withConstraints:CGSizeMake(SCREEN_WIDTH - 20, CGFLOAT_MAX)
                                     limitedToNumberOfLines:0];
    return mutableAttributedString;
}];

NSRange boldRange1 = [text rangeOfString:@"随著稻香河流继续奔跑" options:NSCaseInsensitiveSearch];
[self.aLable addLinkToURL:[NSURL URLWithString:@"http://y.qq.com/portal/song/003aAYrm3GE0Ac.html"]
                withRange:boldRange1];

//电话号码可以自动识别,也可以这样添加
//    NSRange phoneRange = [text rangeOfString:phoneNum options:NSCaseInsensitiveSearch];
//    [self.aLable addLinkToPhoneNumber:phoneNum withRange:phoneRange];

NSRange addressRange = [text rangeOfString:@"微微笑 小时候的梦我知道" options:NSCaseInsensitiveSearch];
[self.aLable addLinkToAddress:@{@"detailAdd":@"幸福街122号",@"lontitude":@"110.011111",@"latitude":@"30.1234"}
                    withRange:addressRange];

self.aLable.frame = CGRectMake(10, 0, SCREEN_WIDTH - 20, size.height);

[self addSubview:self.aLable];

点击链接代理TTTAttributedLabelDelegate


数据探测器会自动探测到链接,邮件地址等。下面代理,就可以实现点击链接的回调。

#pragma mark - TTTAttributedLabelDelegate
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url
{
    NSLog(@"linkClick");
    [[UIApplication sharedApplication] openURL:url];
}
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithAddress:(NSDictionary *)addressComponents
{
    NSLog(@"addressClick");
    NSLog(@"detailAdd:%@,lontitude:%f,latitude:%f",addressComponents[@"detailAdd"],
          [addressComponents[@"lontitude"] floatValue],
          [addressComponents[@"latitude"] floatValue]);
}
- (void)attributedLabel:(TTTAttributedLabel *)label
didSelectLinkWithPhoneNumber:(NSString *)phoneNumber
{
    NSLog(@"phoneClick");
    NSString *num = [NSString stringWithFormat:@"tel:%@",phoneNumber];
    //    NSString *num = [NSString stringWithFormat:@"telprompt://%@",number];
    //而这个方法则打电话前先弹框  是否打电话 然后打完电话之后回到程序中 网上说这个方法可能不合法 无法通过审核
    
    UIApplication *application = [UIApplication sharedApplication];
    AppDelegate *delegate = (AppDelegate *)application.delegate;
    UIWindow *window = delegate.window;
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                                   message:[NSString stringWithFormat:@"是否拨打 %@",phoneNumber]
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"取消"
                                                           style:UIAlertActionStyleCancel
                                                         handler:^(UIAlertAction * _Nonnull action) {}];
    
    UIAlertAction *actionDone = [UIAlertAction actionWithTitle:@"确定"
                                                         style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction * _Nonnull action) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:num]]; //拨号
    }];
    [alert addAction:actionCancel];
    [alert addAction:actionDone];
    
    [window.rootViewController presentViewController:alert animated:YES completion:nil];
}

上一篇《YYText 库学习总结》简单介绍了YYText的用法,下面做一个对比:

功能|YYLabel|YYTextView| TTTAttributedLabel|备注
:---:|:---:|:---:|:---:
字体|✔️|✔️|✔️|
颜色|✔️|✔️|✔️|
描边|✔️|✔️|✔️|
删除样式|✔️|✔️|✔️|
下划线|✔️|✔️|✔️|
背景色|✔️|✔️|✔️|
阴影|✔️|✔️|❌|
斜体|❌|❌|❌|
图片|✔️|✔️|❌|TTT不支持
链接|✔️|✔️|✔️|
数据探测器|❌|✔️|✔️|

注:数据探测器即自动检测链接,电话,邮箱,地址等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容