如何搜索关键字高亮显示

在开发过程中,不免要遇到这种需求:通过关键词搜索内容,内容包含关键词部分要高亮显示。

示例图.png

代码示例:

//简单示例
//cell的简单实现
//self.model.title 为搜索结果要展示的title内容
//self.keyWord 为搜索关键词
//self.titleLabel 为cell展示title的Label

NSString *str = self.model.title;

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:str];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

//一:正则匹配
//NSRegularExpressionCaseInsensitive 不区分大小写 具体用法看其枚举值
//匹配完整搜索关键词字符串
NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:[NSString stringWithFormat:@"%@",self.keyWord] options:NSRegularExpressionCaseInsensitive error:nil];
//匹配搜索关键词的每一个字符都会高亮变色   [cd]和cd的区别
//NSRegularExpression *regex = [[NSRegularExpression alloc]initWithPattern:[NSString stringWithFormat:@"[%@]",self.keyWord] options:NSRegularExpressionCaseInsensitive error:nil];
[regex enumerateMatchesInString:str options:NSMatchingReportProgress range:NSMakeRange(0, [str length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
    [attributedString addAttribute:(NSString*)NSForegroundColorAttributeName
                              value:(id)[UIColor redColor]
                              range:result.range];
} ];

//二:
/**
*  当前为搜索页面时,如果 title 的长度大于关键字长度,循环取关键字长度的字匹配关键字,相同则变色
*/
//        NSString *temp = nil;
//        if (str.length >= self.keyWord.length) {
//
//            for (int i = 0; i < [str length] - self.keyWord.length + 1 ; i++)
//            {
//                temp = [str substringWithRange:NSMakeRange(i, self.keyWord.length)];
//
// 区分大小写:用isEqualToString 不区分大小写:用caseInsensitiveCompare
////                if ([temp isEqualToString:self.keyWord]) {
//                if ([temp caseInsensitiveCompare:self.keyWord] == NSOrderedSame) {
//                    //                NSRange range = [str rangeOfString:self.keyWord];
//                    [attributedString1 addAttribute:(NSString*)NSForegroundColorAttributeName
//                                              value:(id)[UIColor redColor]
//                                              range:NSMakeRange(i, self.keyWord.length)];
//                }
//            }
//        }

[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, str.length)];
[self.titleLabel setAttributedText:attributedString];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,916评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • 对于吃,我想每个人都有发言权。什么好吃,什么难吃,甚至对于同一口味每个人的甚至都大有不同,所谓萝卜青菜各有所爱。我...
    思维工具箱阅读 531评论 0 2
  • 附注1:南苑乡、长辛店已完成样板间验收。宛平、卢沟桥乡正进行样板间的整改。卢沟桥街道、王佐正进行样板间施工。花乡已...
    房管中心阅读 588评论 0 0
  • 1.动态添加方法,首先定义添加的函数 对于自己提前定义的方法eat:来说,很明显这是c语音定义的方法,与平常方法不...
    xiari1991阅读 507评论 0 0