NSTableView在一个单元格中显示图像

时间:2011-01-21 08:04:27

标签: objective-c cocoa xcode nstableview nstableviewcell

我可能会问一个非常简单的问题,但我无法弄清楚如何摆脱这个问题, 要求是,

  1. 表格应显示图片及其旁边的一些文字。为此,我在表格中添加了两列
  2. NSTableView应该是透明的。为此,我创建了一个CustomNSTableView类,内部覆盖drawRect方法,不绘制背景,并告诉单元格不要绘制drawBackground。
  3. 现在下一个障碍是如何显示图像,我必须覆盖/处理以下方法
  4. - (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    
        NSImage *pCellImage = // Get a valid Image ;
    
        if(tableColumn == nil ) return nil;
    
        NSString *colName = [tableColumn identifier];
        if([colName isEqualToString:@"firstColumn"]){
            NSCell *pCell = [[NSCell alloc]initImageCell:pCellImage];
            return pCell;
        }else{
            NSCell *pCell = [[NSCell alloc]initTextCell:@"Some text"];
            return pCell;
    
        }
    }
    

    我添加了tableColumn == nil条件,就像它给出的文档一样,第一次为每一行,当我需要为整行设置一个列时,这将使用tableCOlumn nil调用,但是如果我返回它的崩溃评论BAD_ACCESS,

    现在我的问题是如何处理零条件, 此外,在为两个列设置NSCell之后,此函数将转到另一个委托函数

    - (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
    

    我相信,正确设置dataSet后我不需要使用此功能,

    通过以下实现它崩溃,但我无法弄清楚,出了什么问题,

    我正在设置正确的dataSource和委托,

1 个答案:

答案 0 :(得分:1)

您是否尝试过调用setBackgroundColor并传递清晰的颜色?

[myTableView setBackgroundColor:[[NSColor clearColor]];

如果您使用此方法,请记得告诉周围的NSScrollView不要绘制它的背景。

或者,考虑将表格的背景提供为CALayer

关于在单个列中绘制图像和文本,Apple的开发人员关系已发布了自定义NSCell ImageAndTextCell。您可以将此单元格与NSTableView和NSOutlineView实例一起使用。此自定义单元格用于在单个列中绘制图像和文本。