NSMutableAttributedString 在 UITextView 中追加

NSMutableAttributedString Append in UITextView

我需要为我的 UITextview 添加 2 个 NSMutableAttributedString 当用户 select使用不同的词时,就像这个例子。

字符串=@"blabla1 blabla2 blabla3"

第一次用户 select @"blabla1"

文本看起来像这样 @"blabla1[​​=30=] blabla2 blabla3"

在我 select @"blabla3" 之后,我想在我的 UITextview 中得到的结果是 @""blabla1[​​=30=] blabla2 blabla3"

现在我得到的结果是@"blabla1[​​=30=] 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;
}

你应该做的是获取str(来自UITextView的现有attributedText),然后将属性添加到特定范围

str = [textView attributedText];
UIFont *font = [UIFont boldSystemFontOfSize:16];
[str addAttribute:NSFontAttributeName value:font range:NSMakeRange(range.location, range.length)];

return str;

您正在做的是创建一个内容相同但属性不同的新属性字符串,然后附加到现有的属性文本。这就是为什么您会看到文本重复两次的原因。

属性可以多次添加到一个 string.And 您从没有属性的字符串创建了一个新的 attributedString。 结果你收到@"blabla1[​​=15=] 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;
}