NSTableView透明TableView

时间:2011-01-18 07:00:53

标签: objective-c cocoa nstableview nstableviewcell

UI要求是, 1 - 需要显示两列表,第一列应显示图像,第二列将带有一些文本, 2 - 它应该是透明的,因此它应该显示NSView背景,

我的代码编写如下,

我将NSTableView子类化为覆盖以下方法

-(void)awakeFromNib
{

    [[self enclosingScrollView] setDrawsBackground: NO];
    [[self enclosingScrollView] setBorderType:NSNoBorder];

}

- (BOOL)isOpaque {

    return NO;
} 
- (void)drawRect:(NSRect)drawRect
{
    [super drawRect: drawRect];
}

在我的视图中创建表格实例如下

@interface MyView : CommUICustomView {
    CustomTableView *myTableView;
}

// IMplementation

- (void)InitContactTable 
{

    NSRect          scrollFrame = [self bounds];
    NSScrollView*   scrollView  = [[[NSScrollView alloc] initWithFrame:scrollFrame] autorelease];

    [scrollView setBorderType:NSNoBorder];
    [scrollView setHasVerticalScroller:YES];
    [scrollView setHasHorizontalScroller:NO];
    [scrollView setAutohidesScrollers:YES];
    [scrollView setDrawsBackground: NO];

    NSRect          clipViewBounds  = [[scrollView contentView] bounds];
    pOnLineCTView       = [[[CommUITableView alloc] initWithFrame:clipViewBounds] autorelease];

    //[pOnLineCTView setBackGroundImageByName:@"largegears.png"];


    NSTableColumn*  firstColumn     = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease];
    [[firstColumn dataCell] setDrawsBackground:NO];

    [myTableView  addTableColumn:firstColumn];

    NSTableColumn*  secondColumn        = [[[NSTableColumn alloc] initWithIdentifier:@"secondColumn"] autorelease];
    [[secondColumn dataCell] setDrawsBackground:NO];

    [myTableView  addTableColumn:secondColumn];

    [myTableView setDataSource:self];
    [scrollView setDocumentView:pOnLineCTView];

    [scrollView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];

    [self addSubview:scrollView];

    [self setAutoresizesSubviews:YES];


}

上面代码的输出是,带有白色背景的表,即使我设置NoofRow为0,即白色背景正在绘制, 接下来我试过,通过覆盖CustomTableView的drawRect方法在TableView中实现Background,它帮助了我,输出是Background图像,实现透明并显示Parent视图背景,但是涂上了白色,看起来,它因为得到白色而因为列或单元格, 我试图告诉Cell of Column不要画Backgorund但是它不起作用, 任何人都可以建议我的任何其他方法。

1 个答案:

答案 0 :(得分:0)

它的工作,我也覆盖了drawBackgroundInClipRect,但在评论了这个方法后,我可以看到预期的输出,

现在我可以看到,透明背景上会显示表格单元格数据。