2012-03-16 2 views
1

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

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

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

Спасибо.

+0

Итак ... вы не хотите менять текст, просто атрибут (например, цвет шрифта) субдиапазона, правильно? – Alladinian

+0

Да, я думаю, что изменить текст - самый простой способ, но я не знаю, поэтому, если у вас есть другое решение ... – Garoal

ответ

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"]; 
+0

Я попробую, и если это сработает, я приму ваш ответ. Но я хочу, чтобы CFAttributedString был похож, но не равным, поэтому я попытаюсь немного изменить его. – Garoal

+0

'CFMutableAttributedStringRef' и' NSMutableAttributedString' полностью взаимозаменяемы, как описано в [Toll-Free Bridging] (http: // developer. apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFDesignConcepts/Articles/tollFreeBridgedTypes.html). –

+0

Хорошо, простите, что они не совсем то же самое – Garoal

0

Re: Toll-Free Bridging

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

Ex. Цвет Mac OS X:

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

Смежные вопросы