-->

NSTextView使用数组做大胆的文字(NSTextView making bold text u

2019-10-20 04:03发布

我有具有以下结构的阵列:

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

等,因此第四到复发的variating量。

我的目标是尝试,这一切融合成一个单一的字符串中的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];

所以,我想这不是,却得到了不同的错误

[self->contentView attributedString:contentString];

对于“NSTextView”不可见@interface声明选择“attributedString”

Answer 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];

解决之道在于代码的最后一行中。 所有这一切需要做的是,而不是将数据传递给setString ,使用textStorage来代替,而传递一个对象给它。 (我觉得我得到了正确的术语)

武卫耶希望这有助于人的未来!



Answer 2:

这个怎么样...

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]与像一个init [[NSMutableAttributedString alloc] init]

你应该认识到NSMutableAttributedString不是一个子类NSString ,但不是NSObject ,所以setString:不提供给您的方法。

NSTextView使用insertText:来设置它的值。



文章来源: NSTextView making bold text using an array