问题是,当它发送-editColumn:row:withEvent:select:时,由NSTableView绘制白色背景。它用+ [NSColor textBackgroundColor]填充单元格的矩形。
如果有一个公共API用于覆盖开发人员色彩空间中指定颜色的当前设置,我们可以在-editColumn:row:withEvent:select:或其他类型的覆盖内设置它。我不记得这样的API(赞赏指针)。 另外:我只在Snow Leopard上测试过这个代码(甚至下面的Leopard SDK附录)。根据您打算支持的实际SDK和运行时环境验证代码。
NSTableView有一个用于填充颜色的私有存取器,但它是只读属性。没有setter,所以我们不能只改变标准NSTableView的值。我们必须继承它。 (既然你想在outlineView相同的行为和NSOutlineView已经是NSTableView的子类,我们要继承NSOutlineView。但是,除了超类,代码是相同的。)
@interface ASCOutlineView : NSOutlineView {
}
@end
@implementation ASCOutlineView
- _textBackgroundColor
{
return ([NSColor clearColor]);
}
@end
似乎是在编辑Snow Leopard中的表格单元格时,所有人都需要防止那个耀眼的白色块块破坏HUD。
针对Leopard SDK编译的应用程序需要更多的支持。 Leopard的tableViews可能已经硬编码了一些渲染属性,所以我们需要重写一个选择方法。
NSTextFieldCells实际上是NSTextViews的包装器,所以它们可以在控件中使用。它们通常共享相同的textView实例,该实例由窗口(或其子类,面板,在这种情况下)管理。 NSTableView会更改NSTextFieldCell的设置以符合用于编辑数据的系统UI设置。大多。 NSTextFieldCell然后将这些设置传播到NSTextView。在这个管道的任何一点上,我们都可以重写一个或两个方法来改变这些属性的值来匹配我们自己的UI。
我使用 - [NSTextFieldCell setDrawsBackground:],因为它需要一点努力才能正确。保持内部状态与我们希望在某些其他对象可能依赖于该状态时希望实现的效果保持一致也很重要。
@interface ASCTextFieldCell : NSTextFieldCell {
}
@end
@implementation ASCTextFieldCell
- (void)setDrawsBackground: (BOOL)flag
{
[super setDrawsBackground: NO];
}
@end
并且防止在编辑单元格时出现聚焦环是改变其聚焦环类型设置的一个简单问题。令人沮丧的是,IB不提供访问这个属性,所以它必须以编程方式进行:
for(eachColumn in [hudOutlineView tableColumns])
{
columnCell = [[ASCTextFieldCell alloc] initTextCell: @""];
[eachColumn setDataCell: columnCell];
if([columnCell respondsToSelector: @selector(setFocusRingType:)] != NO)
[(NSTextFieldCell *)columnCell setFocusRingType: NSFocusRingTypeNone];
}