NSMutableAttributedString Добавить в UITextView
Мне нужно добавить 2 NSMutableAttributedString для моего UITextview, когда пользователь выбирает разные слова, как в примере.
string = @ "blabla1 blabla2 blabla3"
в первый раз пользователь выбирает @ "blabla1"
и текст выглядит так @ "blabla1 blabla2 blabla3"
и после того, как я выберу @ "blabla3", результат, который я хочу получить в Моем UITextview, будет @ "blabla1 blabla2 blabla3"
теперь результат, который я получаю, это @ "blabla1 blabla2 blabla3 blabla1 blabla2 blabla3"
что мой код:
-(NSMutableAttributedString*)getNSMutableAttributedString:(NSString*)string withRange:(NSRange)range withTextView:(UITextView*)textView
{
if (!str)
{
str = [[NSMutableAttributedString alloc] initWithString:string];
UIFont *font = [UIFont boldSystemFontOfSize:16];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];
}
else
{
NSMutableAttributedString *mutableAttString = [[NSMutableAttributedString alloc] initWithString:string];
UIFont *font = [UIFont boldSystemFontOfSize:16];
[mutableAttString addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];
NSMutableAttributedString *first = str;
NSMutableAttributedString *second = mutableAttString;
NSMutableAttributedString* result = [first mutableCopy];
[result appendAttributedString:second];
str = result;
}
return str;
}
2 ответа
Атрибуты могут быть добавлены несколько раз к одной строке. И вы создаете новую строку attribuString из строки, которая не имеет атрибутов. В результате вы получите @ "blabla1 blabla2 blabla3 blabla1 blabla2 blabla3"
-(NSMutableAttributedString*)getNSMutableAttributedString:(NSMutableAttributedString*)string withRange:(NSRange)range withTextView:(UITextView*)textView
{
if (!str)
{
str = [[NSMutableAttributedString alloc] initWithAttributedString:string];
UIFont *font = [UIFont boldSystemFontOfSize:16];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];
}
else
{
UIFont *font = [UIFont boldSystemFontOfSize:16];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];
}
return str;
}
Что вы должны сделать, это получить str
(существующий attributedText
от UITextView
), а затем добавить атрибут в определенный диапазон
str = [textView attributedText];
UIFont *font = [UIFont boldSystemFontOfSize:16];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];
return str;
Что вы делаете, это создаете новую атрибутивную строку с тем же содержимым, но с другими атрибутами, а затем добавляете к существующему атрибуту. Вот почему вы видите текст, повторенный дважды.