iOS如何为同一子串的多次出现添加不同的属性

时间:2015-09-22 03:21:10

标签: ios nsattributedstring

我想为同一子字符串的两次出现创建一个具有不同属性的NSAttributedString。

NSString *text = @"ABC & ABC";
NSString *substring = @"ABC"
NSMutableAttributedString *attStr= [[NSMutableAttributedString alloc] initWithString:text];

NSRange range = [[attStr string] rangeOfString:substring];

我想使用方法
为每次出现的子串设置不同的属性  [attStr addAttributes:attributes range:range]。但是,无论我运行多少次,只有第一次出现的substring会更改属性。

有没有办法让addAtributes:知道查找其属性尚未设置的子字符串?

2 个答案:

答案 0 :(得分:1)

您可以通过NSRegularExpression上的迭代获得多个匹配的数组:

NSString *string = @"ABC & ABC";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"ABC" options:NSRegularExpressionCaseInsensitive error:&error];

NSRange range = NSMakeRange(0, string.length);

if (!error) {
    [regex enumerateMatchesInString:string options:NSMatchingReportCompletion range:range usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
        NSLog(@"%@",result);
    }];
}

然后从result.range属性中获取范围。

答案 1 :(得分:0)

您可以计算单词重复的时间。

NSUInteger count = 0, length = [@"ABC & ABC" length];
    NSRange range = NSMakeRange(0, length);
    while (range.location != NSNotFound) {
        range = [self.dateTime rangeOfString:@"ABC" options:0 range:range];
        if (range.location != NSNotFound) {
            range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
            count++;
        }
    }