用户界面要求是, 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;
}
//实现
- (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中实现背景,它帮助了我,输出是背景图像,实现透明并显示父 View 背景,但是用白色绘制,看起来,它被绘制为白色,因为列或单元格的, 我试图告诉单元格不要绘制背景,但它不起作用, 任何其他方法任何人都可以建议我。
最佳答案
它的工作原理,我也重写了drawBackgroundInClipRect,但是在评论这个方法之后,我可以看到预期的输出,
现在我可以看到透明背景,上面显示表格单元格数据。
关于objective-c - NSTableView 透明TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721311/