我有一个NSTableView,下面有一个“添加”按钮。当我单击该按钮时,会在表中添加一个新行,并准备好进行用户输入。
该行显示为白色。我可以将行的颜色设置为透明色吗?这可能吗?我无法弄清楚如何做到这一点。
我将表格设置为透明的代码:
[myTable setBackgroundColor:[NSColor clearColor]];
[[myTable enclosingScrollView] setDrawsBackground: NO];
添加行的代码:
[myTableArray addObject:@""];
[myTable reloadData];
[myTable editColumn:0 row:[myTableArray count]-1 withEvent:nil select:YES];
答案 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];
}