我們正常用的rangeOfString這個API找到第一個符合要求的字符串就直接返回了,當我們要改變所有符合要求的字符串顏色是就不行了,那麼我們就找到一個然後截取掉,一直找到最後,把所有的位置用一個數組記錄一下,思路很簡單,記下來方便以後直接用!
NSString *content = @"qwertyuiqwertyuiqwertyui";
NSString *sub= @"wer";
NSMutableArray *locationArr = [self calculateSubStringCount:content str:sub];
NSMutableAttributedString *attstr = [[NSMutableAttributedString alloc] initWithString:content];
for (int i=0; i<locationArr.count; i++) {
NSNumber *location = locationArr[i];
[attstr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(location.integerValue+i*sub.length, sub.length)];
}
self.label.attributedText = attstr;
- (NSMutableArray*)calculateSubStringCount:(NSString *)content str:(NSString *)tab {
int location = 0;
NSMutableArray *locationArr = [NSMutableArray new];
NSRange range = [content rangeOfString:tab];
if (range.location == NSNotFound){
return locationArr;
}
//聲明一個臨時字符串,記錄截取之後的字符串
NSString * subStr = content;
while (range.location != NSNotFound) {
if (location == 0) {
location += range.location;
} else {
location += range.location + tab.length;
}
//記錄位置
NSNumber *number = [NSNumber numberWithUnsignedInteger:location];
[locationArr addObject:number];
//每次記錄之後,把找到的字串截取掉
subStr = [subStr substringFromIndex:range.location + range.length];
// NSLog(@"subStr %@",subStr);
range = [subStr rangeOfString:tab];
// NSLog(@"rang %@",NSStringFromRange(range));
}
return locationArr;
}
這樣字符串中所有的wer變被改成紅色!