iOS开发知识小集

iOS开发 改变字符串中所有指定字符串的颜色

2019-07-26  本文已影响23人  有O梦想的咸鱼

最近项目有个需求,输入搜索条件,要在搜索出的结果中把搜索条件变成蓝色:
刚开始这么做:
解释:model.groupName,后台返回的组名
model.searchText,搜索条件(把外部的搜索条件保存到model中)

NSMutableAttributedString *nameString = [[NSMutableAttributedString alloc]initWithString:model.groupName];
NSRange  Range = NSMakeRange([[model.groupName string] rangeOfString:model.searchText].location, [[model.groupName string] rangeOfString:model.searchText].length);
[nameString addAttribute:NSForegroundColorAttributeName value:Blue_Color range:Range];
self.nameLabel.attributedText = nameString;

这样做只能是第一次寻找到的会变颜色,字符串中出现的其他的就不会变:例:model.groupName = @“071107”,model.searchText = @“07”,最终结果就会变成:
\color{blue}{07}1107。
所以后面用如下方法:循环遍历每个字符。

NSMutableAttributedString *nameString = [[NSMutableAttributedString alloc]initWithString:model.groupName];   
    for (int i = 0; i < model.groupName.length; i++) {
        if ((model.groupName.length - i) < model.searchText.length) {  //防止遍历剩下的字符少于搜索条件的字符而崩溃
   
           }else {
        NSString *str = [model.groupName substringWithRange:NSMakeRange(i, model.searchText.length)];
        if ([model.searchText isEqualToString:str]) {
            [nameString addAttribute:NSForegroundColorAttributeName value:Blue_Color range:NSMakeRange(i, model.searchText.length)];
             i = i + (int)(model.searchText.length) - 1;
            }
        }
    }
    self.nameLabel.attributedText = nameString;

结果:\color{blue}{07}11\color{blue}{07}

上一篇下一篇

猜你喜欢

热点阅读