/**
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;
}