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;
}
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;
}
相关文章推荐
- 使用ICU库中的正则表达式匹配关键字之间含有特殊字符的关键字示例
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- java正则表达式对一些特殊字符匹配的理解
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- javaScript正则匹配汉字与特殊字符(项目中遇到关键字匹配的方法)
- Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
- PHP正则匹配汉字、字母、数字和下划线,不含特殊字符
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等
- XML中一些字符拥有特殊的意义实体引用
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- mysql模糊查询匹配特殊字符
- html学习笔记(1)--处理特殊字符以及其他的一些小细节
- java正则表达式,大写字母、小写字母、特殊字符、数字 两种两种以上组合匹配
- python最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等
- Android开发资源文件string.xml的一些特殊字符
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等