工作新学知识iOS精华文章第三方库

TTTAttributedLabel简单使用

2016-09-07  本文已影响11623人  0o冻僵的企鹅o0

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不支持
链接|✔️|✔️|✔️|
数据探测器|❌|✔️|✔️|

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

上一篇下一篇

猜你喜欢

热点阅读