美文网首页
TTTAttributedLabel的简单使用

TTTAttributedLabel的简单使用

作者: Homey313 | 来源:发表于2020-09-27 18:28 被阅读0次

    因为需求要写一个聊天室,简单地显示用户昵称和输入信息,点击用户昵称需要禁言,label上实现部分字符串点击好像有点麻烦,就直接使用TTTAttributedLabel了。
    TTTAttributedLabel支持xib,我就直接在xib上改了label类型,然鹅改完一直有报错:


    image.png

    很神奇,不影响项目运行,pod update了一下,短暂的消失了一阵,又莫名其妙的出现了,到现在也没消失。。
    如果你要用NSAttributedString的话,直接设置label的字体字号颜色就不起作用。我看大多都调用这个方法:

    [_contentLabel setText:str afterInheritingLabelAttributesAndConfiguringWithBlock:^ NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) {
            NSRange clickRange = [[mutableAttributedString string] rangeOfString:msgModel.user];
            [mutableAttributedString addAttribute:(NSString*)kCTForegroundColorAttributeName value:(id)[color CGColor] range:clickRange];
            return mutableAttributedString;
    }];
    

    简单设置点击部分的颜色,实现效果是这样的:

    image.png
    你想要设置的属性必须加在NSMutableAttributedString中,而且设置label的text而不是attributedText
    NSString *str = [NSString stringWithFormat:@"%@: %@", msgModel.user, msgModel.content];
        NSMutableAttributedString *attriStr = [[NSMutableAttributedString alloc] initWithString:str];
        [attriStr addAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]} range:[str rangeOfString:str]];
        [attriStr addAttributes:@{NSForegroundColorAttributeName: color} range:NSMakeRange(0, msgModel.user.length + 1)];
        [attriStr addAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:13 weight:UIFontWeightMedium]} range:[str rangeOfString:str]];
        _contentLabel.text = attriStr;
    

    为昵称部分添加点击事件,以下两种方法都可以:

    [_contentLabel addLinkToTransitInformation:@{@"selecter":@"forbiddenWords"} withRange:NSMakeRange(0, msgModel.user.length + 1)];
    
    #pragma mark - TTTAttributedLabelDelegate
    - (void)attributedLabel:(TTTAttributedLabel *)label
    didSelectLinkWithTransitInformation:(NSDictionary *)components {
      
           NSLog(@"禁言%@", _msgModel.user);
    }
    
    [_contentLabel addLinkToURL:[NSURL URLWithString:@"forbiddenWords"] withRange:NSMakeRange(0, msgModel.user.length + 1)];
    
    #pragma mark - TTTAttributedLabelDelegate
    - (void)attributedLabel:(__unused TTTAttributedLabel *)label
       didSelectLinkWithURL:(NSURL *)url {
        NSLog(@"禁言%@", _msgModel.user);
    }
    

    链接下面默认有下划线的,可以去掉:

    _contentLabel.linkAttributes = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:false] forKey:(NSString *)kCTUnderlineStyleAttributeName];
    

    这时候点击昵称加一个禁言弹窗,使用UIAlertController,弹窗出来时会出现一个问题:

    image.png
    昵称的字变灰了,而且弹窗关掉之后没有变回原来颜色,变成了黑色。。
    然后我把最上面setText的方法换成
        NSString *str = [NSString stringWithFormat:@"%@: %@", msgModel.user, msgModel.content];
        NSMutableAttributedString *attriStr = [[NSMutableAttributedString alloc] initWithString:str];
        [attriStr addAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]} range:[str rangeOfString:str]];
        [attriStr addAttributes:@{NSForegroundColorAttributeName: color} range:NSMakeRange(0, msgModel.user.length + 1)];
        [attriStr addAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:13 weight:UIFontWeightMedium]} range:[str rangeOfString:str]];
        _contentLabel.text = attriStr;
    

    弹窗出现的时候昵称仍然会变灰,但是弹窗关掉之后会变回正常的彩色,不知道是不是有属性可以控制这个问题,知道的大神告诉我哦

    相关文章

      网友评论

          本文标题:TTTAttributedLabel的简单使用

          本文链接:https://www.haomeiwen.com/subject/xryluktx.html