最近项目有个需求,输入搜索条件,要在搜索出的结果中把搜索条件变成蓝色:
刚开始这么做:
解释: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”,最终结果就会变成:
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;
结果:11。
网友评论