iOS开发 遍历字符串中所有子字符串的位置信息 并改变颜色

 我们正常用的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变被改成红色!

猜你喜欢

转载自blog.csdn.net/wangletiancsdn/article/details/105434729
今日推荐