CFAttributedString替换字符串的出现?

时间:2012-03-16 14:46:09

标签: iphone objective-c ios string ios5

我知道在CFAttributedString中没有响应任何方法,比如NSString的stringByReplacingOccurrencesOfString:withString:方法,我找不到一个可以使用CF(Mutable)AttributedString来做到这一点的方法。

我想用相同的文本替换字符串中的一些文本,但是另一种颜色,例如。 g。,我有字符串@"This is a text",我想更改单词“text”的颜色。

我希望这个问题很清楚,如果不是,请问我。

感谢。

2 个答案:

答案 0 :(得分:2)

我会在NSMutableAttributedString上添加一个类别:

@implementation NSMutableAttributedString (MySearchAndReplaceCategory)

- (void)setAttributes:(NSDictionary *)attributes forOccurencesOfString:(NSString *)target
{
    NSRange searchRange = NSMakeRange(0, self.length);

    while ( searchRange.length )
    {
        NSRange range = [self.string rangeOfString:target options:0 range:searchRange];
        if ( ! range.length )
            break;

        [self setAttributes:attributes range:range];
        searchRange.length = NSMaxRange(searchRange) - NSMaxRange(range);
        searchRange.location = NSMaxRange(range);
    }
}

@end

然后使用类似的东西:

UIColor *color = [UIColor greenColor];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:(__bridge id) color.CGColor
                                                       forKey:(__bridge id) kCTForegroundColorAttributeName];
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"This is a text"];
[text setAttributes:attributes forOccurencesOfString:@"text"];

答案 1 :(得分:0)

re:免费电话桥接

CFAtttributeString和NSAttributeString具有不同的属性键。

实施例。 Color Mac OS X:

NSForegroundColorAttributeName - NSColor - 默认blackColor kCTForegroundColorAttributeName - 与此属性关联的值必须是CGColor对象。默认值为黑色。