iOS开发 实现搜索词标红的效果

本文介绍了如何在iOS应用中实现搜索结果中搜索词的高亮标红效果,详细讲述了具体实现过程,包括返回标红字符串的方法,并修复了一个小bug。适用于提升用户体验的搜索功能开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近公司应要求写一个搜索功能,要求实现搜索结果中把搜索词批量标红处理,整了半天,后又断断续续的改进了一下

以下是具体实现:

#import <Foundation/Foundation.h>

@interface TiSearch : NSObject

+(NSMutableAttributedString *)getRedStringWith:(NSArray *)array andString:(NSString *)str;

@end

#import "TiSearch.h"

@implementation TiSearch
/**
 *  返回个别标红的字符串
 *
 *  @param array 要标红的文字数组
 *  @param str   整段文本
 *
 */
+(NSMutableAttributedString *)getRedStringWith:(NSArray *)array andString:(NSString *)str{
    
    NSString * allString = str;
    NSMutableAttributedString *attStr =
    [[NSMutableAttributedString alloc] initWithString:str];
    // 设置高亮颜色
    UIColor *color = [UIColor redColor];
    for (int i = 0 ; i < array.count; i ++) {
        //每次for循环都会对字符串进行截取,所以要保证for循环开始时字符串的完整性
        str = allString;
        
        NSString * oneString = array[i];
        
        NSRange range = [str rangeOfString:oneString];

        while(range.location!= NSNotFound ) {
            [attStr addAttribute:NSForegroundColorAttributeName
                           value:color
                           range:NSMakeRange(range.location+[allString rangeOfString:str].location, range.length)];
            str = [str substringFromIndex:range.location + range.length];
            range = [str rangeOfString:oneString];
            
           
        }
        
    }
       
    
    return attStr;

}

返回的是一个已经标红的字符串,对应label的AttributedText 属性, 可以直接赋值过去


有一点小BUG,更正一下代码,如下

/**
 *  返回个别标红的字符串
 *
 *  @param array 要标红的文字数组
 *  @param str   整段文本
 *
 */
+(NSMutableAttributedString *)getRedStringWith:(NSArray *)array andString:(NSString *)str{

    NSString * allString = str;
    NSMutableAttributedString *attStr =
    [[NSMutableAttributedString alloc] initWithString:str];
    // 设置高亮颜色
    UIColor *color = [UIColor redColor];
    for (int i = 0 ; i < array.count; i ++) {
        str = allString;
        NSString * oneString = array[i];
        NSRange range = [str rangeOfString:oneString];
        while(range.location!= NSNotFound ) {
            [attStr addAttribute:NSForegroundColorAttributeName
                           value:color
                           range:NSMakeRange(range.location+[allString rangeOfString:str].location, range.length)];
            str = [str substringFromIndex:range.location + range.length];
            range = [str rangeOfString:oneString];
        }
    }
    return attStr;
}




转载请注明出处,谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值