添加透明背景的行

时间:2011-02-22 09:49:08

标签: objective-c cocoa macos transparency nstableview

我有一个NSTableView,下面有一个“添加”按钮。当我单击该按钮时,会在表中添加一个新行,并准备好进行用户输入。

该行显示为白色。我可以将行的颜色设置为透明色吗?这可能吗?我无法弄清楚如何做到这一点。

我将表格设置为透明的代码:

[myTable setBackgroundColor:[NSColor clearColor]];
[[myTable enclosingScrollView] setDrawsBackground: NO];

添加行的代码:

[myTableArray addObject:@""];
[myTable reloadData];
[myTable editColumn:0 row:[myTableArray count]-1 withEvent:nil select:YES];

2 个答案:

答案 0 :(得分:1)

尝试将单元格的背景颜色设置为透明

[cell setBackgroundColor:[UIColor clearColor]];

它对我有用

答案 1 :(得分:0)

我认为你可能需要做一些子类化才能完成你想要做的事情。

通过子类化NSTableView,您可以覆盖preparedCellAtColumn:row:方法,如下所示:

- (NSCell*) preparedCellAtColumn:(NSInteger)column row:(NSInteger)row {
    NSTextFieldCell *edit_field;

    edit_field = (NSTextFieldCell*) [super preparedCellAtColumn:column row:row];
    if ( [self editedRow] == row && [self editedColumn] == column  ) {
        [edit_field setBackgroundColor:[NSColor clearColor]];
        [edit_field setDrawsBackground:NO];

    }

    return edit_field;
}

但是,NSTableView文档表明您的单元格有另一个调用的方法,它似乎重置了颜色。 (editWithFrame:inView:editor:delegate:event :)创建一个覆盖此方法的NSTextViewCell的子类可以做你想要的。

修改 通过文档搜索我发现了这个:

  

如果接收器不是文本类型的NSCell对象,则不执行编辑。否则,字段编辑器(textObj)的大小为aRect,其superview设置为controlView,因此它完全覆盖接收器。

因此,在这种情况下您需要自定义的是字段编辑器,它可以掩盖您在NSTableView或单元格上执行的任何显示更改。

字段编辑器由窗口委托的方法windowWillReturnFieldEditor:toObject返回:

这应该允许您在将已编辑的单元格的属性返回到NSTableView

之前设置它们的属性

修改 试过这个无济于事但可能有所帮助:

-(id) windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client{
    NSText *editor =  [window fieldEditor:YES forObject:client];
    [editor setBackgroundColor:[NSColor clearColor]];
    [editor setDrawsBackground:NO];
    return [editor autorelease];
}