2014-02-06 2 views
0

Привет всем :) У меня есть один метод, который вырезает длинный текст после определенного количества слов. Это выглядит следующим образом:Отсутствует некоторые методы при смене с NSString на NSAttributedString

NSString *trimString(NSString *string, int length, Boolean soft) { 
if(string == Nil || string.length == 0){ 
    return string; 
} 

NSMutableString *sb = [[NSMutableString alloc]init]; 
int actualLength = length - 3; 
if(string.length > actualLength){ 
    // -3 because we add 3 dots at the end. Returned string length has to be length including the dots. 
    if(!soft) { 
     [sb appendString:[string substringToIndex:actualLength - 3]]; 
     [sb appendString:@"..."]; 
     return sb; 
    } else { 
     NSRange r = NSMakeRange(0, actualLength); 
     //NSRange range = [string rangeOfString:@" " options:NSBackwardsSearch range:r]; 
     NSRange range = [string rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@" \n\r\t"] options:NSBackwardsSearch range:r]; 
     [sb appendString:[string substringToIndex:range.location]]; 
     [sb appendString:@"..."]; 
     return sb; 
    } 
} 
return string; 
} 

Моя проблема в том, что я должен изменить все, чтобы NSAttributedString, но нет вещи, как «substringToIndex:» так что я могу изменить его .... ли вообще возможно Измени это?

Спасибо!

+0

Вы можете использовать NSMutableAttributedString * attStr = [[NSMutableAttributedString alloc] initWithString: string ]; – Greg

ответ

1

Вы можете сделать что-нибудь к NSAttributedString, что NSString поддерживает, ссылаясь на string свойство на приписываемой строке. Это основной NSString, с которым вы можете делать все, что вам нравится.

+0

Спасибо за этот отзыв :) – Davis

+0

Но помнить, что свойство string не имеет атрибутов из NSAttributedString. – bruno

1

Если вы просто ищете для струнной вырезки (substringToIndex:) вы можете использовать:

- (NSAttributedString *)attributedSubstringFromRange:(NSRange)aRange 

Создать правильный выбор и это даст вам функциональность вы «недостающую».

Source.

1

Предполагая, что вы работаете с NSMutableAttributedString, вам нужно вызвать вашу функцию на свойстве строки NSAttributedString, и вы можете использовать возвращенную строку в качестве параметра replaceCharactersInRange:withString:

Если бы я тебя, я бы изменить прототипом функции для возврата значения NSRange, таким образом вы могли бы использовать его более общим способом со строками и атрибутамиString (с такими функциями, как stringWithRange)

+1

* cough * 'mutableString', если он хочет его мутировать. Атрибуты будут обрабатываться правильно. – Tommy

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