NSTableView与自定义NSColumnHeaderCell

时间:2010-06-24 08:15:34

标签: cocoa nstableview

在我的应用程序中,我有一个NSTableView,其中包含一个以编程方式分配的自定义标题单元格。分配自定义单元格的代码如下所示:

-(void)setupTableHeader:(id)table {
 NSArray *columns = [table tableColumns];
    NSEnumerator *cols = [columns objectEnumerator];
    NSTableColumn *col = nil;

    TRDarkTableColumnHeaderCell *iHeaderCell;

    while (col = [cols nextObject]) {
        iHeaderCell = [[TRDarkTableColumnHeaderCell alloc] initTextCell:[[col headerCell] stringValue]];
        [col setHeaderCell:iHeaderCell];
        [iHeaderCell release];
    }
}

这可以按照您的预期运作。但是,当我的窗口调整大小并且NSTableView呈现其滚动条时,会使用默认的NSTableHeaderCell创建一个额外的标题单元格。为了尝试处理这个问题,我尝试设置一个通知来触发窗口调整大小。不幸的是,这没有任何效果(我的setupTableHeader函数仍然为表返回1列)

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setupTableHeaders) name:NSWindowDidResizeNotification object:[[NSApp delegate] window]];

请注意,我的通知调用了一个辅助函数setupTableHeaders,它调用上面提到的setupTableHeader函数。这是一个截图来说明问题:

alt text http://img22.imageshack.us/img22/640/headercell.png

1 个答案:

答案 0 :(得分:2)

这是角落视图。尝试:

[table setCornerView:nil];

如果列调整大小允许所有列的总宽度小于表的宽度(暴露“空白”标题区域),您可能还必须使用自定义子类替换表的标题视图,该子类绘制相同的背景由默认标题单元格绘制。)