CFAttributedString заменить вхождения строки? - PullRequest
1 голос
/ 16 марта 2012

Я знаю, что в CFAttributedString не отвечает ни на один метод, такой как stringByReplacingOccurrencesOfString:withString: метод NSString, и я не могу найти метод, который может сделать это, используя CF (Mutable) AttributedString.

Я хочу заменить некоторый текст в строке тем же текстом, но другим цветом, e. у меня есть строка @"This is a text" и я хочу изменить цвет слова "текст".

Надеюсь, вопрос достаточно ясен, если нет, спросите меня.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Я бы добавил категорию на 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"];
0 голосов
/ 23 марта 2013

re: Tall-Free Bridging

CFAtttributeString и NSAttributeString имеют разные атрибуты ключей.

Пример.Цвет Mac OS X:

NSForegroundColorAttributeName - NSColor - Default blackColor kCTForegroundColorAttributeName - значение, связанное с этим атрибутом, должно быть объектом CGColor.Значение по умолчанию - черный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...