Ios 如何在循环中使用新行为NSMutableAttributedString的部分着色?
我有一个函数,它可以将数据与新行字符一起追加到指定的最大值。然后截断最后一个新行字符,并返回结果。但是,我想使用NSMutableAttributedString来实现这一点,这样每个数据段都可以根据某些内容进行着色 这是我所拥有的Ios 如何在循环中使用新行为NSMutableAttributedString的部分着色?,ios,objective-c,cocoa-touch,nsattributedstring,Ios,Objective C,Cocoa Touch,Nsattributedstring,我有一个函数,它可以将数据与新行字符一起追加到指定的最大值。然后截断最后一个新行字符,并返回结果。但是,我想使用NSMutableAttributedString来实现这一点,这样每个数据段都可以根据某些内容进行着色 这是我所拥有的 - (NSString *)widgetNameAppendedWithNewLineForMaximum:(int)maximum { NSMutableString *result = [NSMutableString string]; int
- (NSString *)widgetNameAppendedWithNewLineForMaximum:(int)maximum
{
NSMutableString *result = [NSMutableString string];
int count = 0;
if (maximum > 0) {
for (Widget *widget in self.widgets) {
if (count >= maximum) {
break;
}
[result appendString:[NSString stringWithFormat:@"%@\n", widget.fullName]];
count++;
}
}
return [result stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
}
但是,我希望每个widget.fullName都基于某个集合着色。假设我们通过以下调用返回了适当的颜色
[[ColorManager sharedManager] colorForWidgetFullName:widget.fullName];
如何使用属性字符串执行上述操作,以便小部件名称的颜色可以不同?如何修剪最后一个换行符?没有内置的方法来修剪属性字符串。我不修剪它,因为我没有添加它。我在每行前面添加了一个
\n
,第一行除外。看看我是如何初始化、使用和更新分隔符的。或者,如果您在末尾添加了一个分隔符,您可以使用[result.mutableString deleteCharactersRange:NSMakeRange(result.mutableString-1,1)]
删除它。使用range函数进行修剪
- (NSAttributedString *)widgetNameAppendedWithNewLineForMaximum:(int)maximum {
NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init];
NSString *separator = @"";
int count = 0;
for (Widget *widget in self.widgets) {
if (count >= maximum) {
break;
}
NSString *fullName = widget.fullName;
UIColor *color = [[ColorManager sharedManager] colorForWidgetFullName:fullName];
NSString *line = [separator stringByAppendingString:line];
separator = @"\n";
NSDictionary *attributes = @{ NSForegroundColorAttributeName: color };
NSAttributedString *richLine = [[NSAttributedString alloc] initWithString:line
attributes:attributes];
[result appendAttributedString:richLine];
count++;
}
return result;
}