Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在循环中使用新行为NSMutableAttributedString的部分着色?_Ios_Objective C_Cocoa Touch_Nsattributedstring - Fatal编程技术网

Ios 如何在循环中使用新行为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

我有一个函数,它可以将数据与新行字符一起追加到指定的最大值。然后截断最后一个新行字符,并返回结果。但是,我想使用NSMutableAttributedString来实现这一点,这样每个数据段都可以根据某些内容进行着色

这是我所拥有的

- (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;
}