美文网首页
ios 搜索关键字高亮显示

ios 搜索关键字高亮显示

作者: liang1030 | 来源:发表于2020-04-29 17:15 被阅读0次

    注:将以下方法加到NSString的分类里

    /**
    *  部分子字符串高亮显示(搜索的内容不进行拆分,直接匹配有则显示)
    *
    *  @param substring  需高亮显示的字符串
    *  @param color 高亮颜色
    *
    *  @return 富文本字符串
    */
    
    - (NSMutableAttributedString *)stringWithHighLightSubstring:(NSString *)substring highLightColor:(UIColor *)color {
        NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
        NSString * copyTotalString = self;
        NSMutableString * replaceString = [NSMutableString stringWithString:@""];
        for (int i = 0; i < substring.length; i ++) {
            [replaceString appendString:@" "];
        }
        while ([copyTotalString rangeOfString:substring].location != NSNotFound) {
             NSRange range = [copyTotalString rangeOfString:substring];
             [attributedString addAttribute:NSForegroundColorAttributeName value:color range:range];
            if (copyTotalString.length>range.location) {
                copyTotalString = [copyTotalString stringByReplacingCharactersInRange:range withString:replaceString];
            }else {
                copyTotalString = @"";
            }
         }
        return attributedString;
    }
    
    /**
    *  部分子字符串高亮显示(支持搜索的内容拆分为单个字符串与整体的数据进行比较)
    *
    *  @param substring  需高亮显示的字符串
    *  @param color 高亮颜色
    *
    *  @return 富文本字符串
    */
    
    - (NSMutableAttributedString *)stringWithPartHighLightSubstring:(NSString *)substring highLightColor:(UIColor *)color {
        NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self];
        NSString * copyTotalString = self;
        NSMutableString * replaceString = [NSMutableString stringWithString:@" "];
        for (int i = 0; i < substring.length; i ++) {
            NSString *singleString = [substring substringWithRange:NSMakeRange(i, 1)];
            while ([copyTotalString rangeOfString:singleString].location != NSNotFound) {
                 NSRange range = [copyTotalString rangeOfString:singleString];
                 //颜色如果统一的话可写在这里,如果颜色根据内容在改变,可把颜色作为参数,调用方法的时候传入
                 [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor orangeColor] range:range];
                 copyTotalString = [copyTotalString stringByReplacingCharactersInRange:range withString:replaceString];
             }
        }
        return attributedString;
    }
    

    相关文章

      网友评论

          本文标题:ios 搜索关键字高亮显示

          本文链接:https://www.haomeiwen.com/subject/bosnwhtx.html