label 富文本编辑 多个关键字高亮 (一些特殊的字符有可能匹配不到 如:*)

/**

 label 富文本编辑(改变指定文字 颜色 大小)


 @param label 目标 label

 @param stringArray  要改变的文字数组

 @param font 字体大小

 @param color 文字颜色

 */

- (void)changeLabelTextColor:(UILabel *)label withChangeText:(NSArray *)stringArray withFont:(UIFont *)font withColor:(UIColor *)color{

    if ((!color && !font) || ![self judgeIsNull:label.text] || !stringArray.count) {//判空

        return;

    }

    NSString *text = label.text;

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];

    

    //设置要改变的属性

    NSMutableDictionary *attributesDict = [NSMutableDictionary dictionaryWithCapacity:0];

    if (font) {

        [attributesDict setObject:font forKey:NSFontAttributeName];

    }

    if (color) {

        [attributesDict setObject:color forKey:NSForegroundColorAttributeName];

    }


    //中间删除线

//    [attributesDict setObject:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) forKey:NSStrikethroughStyleAttributeName];

//    [attributesDict setObject:kHCColor_999999 forKey:NSStrikethroughColorAttributeName];

//    //iOS 10.3之后富文本的NSUnderlineStyleSingle系统都能正常显示,更新最新之后没不见了 加下面一句话

//    [attributesDict setObject:@(0) forKey:NSBaselineOffsetAttributeName];


    //关键字高亮处理

    [[self expressionWithPattern:[self regularPattern:stringArray]] enumerateMatchesInString:text  options:0 range:NSMakeRange(0, [text length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

        NSRange matchRange = [result range];

        if (attributesDict) {

            [attributedString addAttributes:attributesDict range:matchRange];

        }

        

        //if ([result resultType] == NSTextCheckingTypeLink) {

        //     NSURL *url = [result URL];

        //    [attributedString addAttribute:NSLinkAttributeName value:url range:matchRange];

        //}

    }];

    

    label.attributedText = attributedString;

}



/**

 正则判断


 @param keys 关键字数组

 @return 关键字的字符串集合字符串

 */

-(NSString *)regularPattern:(NSArray *)keys{

    NSMutableString *pattern = [[NSMutableString alloc]initWithString:@"(?i)"];

    

    for (NSString *key in keys) {

        [pattern appendFormat:@"%@|",key];

    }

    

    return pattern;

}


/**

用了OC自带的 NSRegularExpression 来进行正则表达式匹配


 @param pattern 关键字集合字符串

 @return NSRegularExpression

 */

- (NSRegularExpression *)expressionWithPattern:(NSString *)pattern {

    NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:nil];

    return expression;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值