您的位置:首页 > 移动开发 > IOS开发

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

2017-10-26 17:12 357 查看
/**

 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
<
cf2c
span style="color:#3e1e81;">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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 富文本
相关文章推荐