1

我有一个具有以下结构的数组:

(
    [0] = (
         [0] = @"Title string"
         [1] = @"Some content string"
    )
    [1] = (
         [0] = @"Title string"
         [1] = @"Some content string"
    )
    [2] = (
         [0] = @"Title string"
         [1] = @"Some content string"
    )
    ...
)

依此类推,依此类推,第四次重复发生。

我的目标是尝试将其全部合并为一个字符串以显示在 NSTextField 中,并使每个标题字符串加粗。因此,如果输出上面的代码,它将看起来像这样。


标题字符串
一些内容字符串

标题字符串
一些内容字符串

标题字符串
一些内容字符串


我的第一个问题是如何在某些文本为粗体的情况下创建单个字符串;我的第二个问题是如何获取该字符串并将其发送到 NSTextField?


到目前为止,这就是我所做的。
我试过用NSMutableAttributedString这样的方式制作字符串:

NSMutableAttributedString *contentString = [NSMutableAttributedString alloc];

for (int i=0; i<[result count]; i++) {

    [contentString addAttribute:NSFontAttributeName
                value:[NSFont fontWithName:@"HelveticaNeue-Bold" size:16.0]
                range:NSRangeFromString(result[i][0])];
}

但是我不知道如何在字符串中附加任何其他内容,或者尝试单独打印,因为在尝试以下内容以在 NSTextField 中显示它时出现此错误。

[self->contentView setString:contentString];

不兼容的指针类型将“NSMutableAttributedString *”发送到“NSString *”类型的参数

所以我尝试了这个,但得到了一个不同的错误

[self->contentView attributedString:contentString];

'NSTextView' 没有可见的@interface 声明选择器'attributedString'

4

2 回答 2

1

设法找到一种方法让它发挥作用

NSMutableAttributedString *contentString = [NSMutableAttributedString alloc];

for (int i=0; i<[result count]; i++) {    
    NSMutableAttributedString *resultString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@\n\n", result[i][0], result[i][1]]];
    NSDictionary *attributes = @{
        NSFontAttributeName : [NSFont fontWithName:@"HelveticaNeue-Bold" size:12.0]
    };
    NSString *subtitle = [NSString stringWithFormat:@"%@", result[i][0]];

    [resultString setAttributes:attributes range:NSMakeRange(0, [subtitle length])];
    [contentString appendAttributedString:resultString];
}

[self->content setString:@""];
[[self->content textStorage] appendAttributedString:contentString];

解决方案在最后一行代码中。所有需要做的就是不要将数据传递给setStringtextStorage而是使用并将对象传递给它。(我想我的术语是对的)

是的,希望这对将来的任何人都有帮助!

于 2014-05-30T13:39:26.307 回答
0

这个怎么样...

NSMutableAttributedString *contentString = [[NSMutableAttributedString alloc] init];
for (int i = 0; i < [result count]; i++) {
    NSMutableAttributedString *resultString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@\n%@\n\n", result[i][0], result[i][1]]];
    [resultString addAttribute:NSFontAttributeName
            value:[NSFont fontWithName:@"HelveticaNeue-Bold" size:16.0]
            range:NSRangeFromString(result[i][0])];
    [contentString appendAttributedString:resultString];
}

关于您的其他代码的一些注释。确保将您的[NSMutableAttributedString alloc]与初始化相匹配[[NSMutableAttributedString alloc] init]

您应该意识到,NSMutableAttributedString它不是 的子类NSString,而是NSObject,因此setString:不是您可用的方法。

NSTextView用于insertText:设置它的值。

于 2014-05-24T02:23:25.643 回答