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;
}
我需要为我的 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;
}