NSTableView - 表格列,具有丰富的格式化文本和图像

时间:2014-07-30 17:19:53

标签: objective-c macos cocoa nstableview

我是Cocoa的新手,我希望显示单列NSTableView,其中包含多行格式化(一个单元格内的不同字体和颜色)和图像。 NSTableView是否适合完成此任务?

如果我怎么能得到它?我需要使用NSCell控件吗?我将感谢很好的说明教程和示例。我试图谷歌,但没有找到有用的东西。

1 个答案:

答案 0 :(得分:5)

基于单元格的表格视图方法

使用基于单元格的表格视图,您无法执行此操作,因为标准单元格NSImageCell和NSTextCell只能显示图像或文本。您可以创建NSCell的子类来创建一个同时接受图像和文本的单元格,例如Display icon and text in same cell of NSTableView。要显示不同的字体和颜色,您需要使用NSAttributedString,例如,(不检查此代码Xcode,因此可能存在一些错误,但它会给您一个想法),

NSString *redWord = @"Hello";
NSString *greenWord = @"World";
NSString *message = [NSString stringWithFormat:@"%@ %@", redWord, greenWord];

NSMutableAttributedString *text = 
 [[NSMutableAttributedString alloc] 
   initWithAttributedString:message];

[text addAttribute:NSForegroundColorAttributeName 
             value:[NSColor redColor] 
             range:NSMakeRange(0, [redWord length])];

[text addAttribute:NSFontAttributeName 
             value:[NSFont fontWithName:@"Arial Italic" size:12];
             range:NSMakeRange(0, [redWord length])];

[text addAttribute:NSForegroundColorAttributeName 
             value:[NSColor greenColor] 
             range:NSMakeRange([redWord length] + 1, [greenWord length])];

[text addAttribute:NSFontAttributeName 
             value:[NSFont fontWithName:@"Times Bold" size:12];
             range:NSMakeRange([redWord length] + 1, [greenWord length])];

基于视图的表格视图方法

基于视图的表格视图在表格单元格中显示NSTableCellView个视图。标准的NSTableCellView具有imageViewtextField属性,因此出于您的目的,这似乎是一个理想的选择。只需设置表格视图单元格的图像视图即可显示图像tableCellView.imageView.image = myImageset,然后在文本字段tableCellView.textField.attributeStringValue = myAttributedString中设置要显示的文本。请注意,您必须使用属性字符串来获取不同的颜色和字体(参见上文)。