我有一个具有以下结构的数组:
(
[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'
答案 0 :(得分: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
代替并将对象传递给它。 (我想我的术语是正确的)
Bah是的,希望这有助于将来的任何人!
答案 1 :(得分: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:
设置其值。