当用户选择不同的单词时,我需要为我的UITextview附加2个NSMutableAttributedString。
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;
}
答案 0 :(得分:1)
您应该做的是获取str
(attributedText
中的现有UITextView
),然后将属性添加到特定范围
str = [textView attributedText];
UIFont *font = [UIFont boldSystemFontOfSize:16];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];
return str;
您正在做的是创建一个具有相同内容但属性不同的新属性字符串,然后附加到现有的attributionText。这就是为什么你看到文本重复了两次。
答案 1 :(得分:1)
属性可以多次添加到一个字符串。然后从字符串创建一个新的attributionString,它没有属性。 结果你收到@“ 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;
}