問題は、NSTableViewが-editColumn:row:withEvent:select:を送信したときに、白い背景が描画されることです。セルの矩形を+ [NSColor textBackgroundColor]で塗りつぶします。
開発者のカラースペースから名前付きカラーの現在の設定をオーバーライドするパブリックAPIがある場合は、-editColumn:row:withEvent:select:などのオーバーライド内に設定できます。私はそのようなAPIを思い出さない(ポインタは高く評価されている)。 また、私はSnow Leopardでこのコードをテストしました(以下のLeopard SDKの補遺も)。サポートする実際のSDKおよび実行時環境に対してコードを検証します。
NSTableViewには、塗りつぶし色に使用するプライベートアクセサがありますが、読み取り専用プロパティです。私たちは標準のNSTableViewで値を変更することはできません。それをサブクラス化する必要があります。 (あなたがoutlineViewで同じ動作をしたいとNSOutlineViewはすでにNSTableViewのサブクラスであるので、我々は、コードが同じであるスーパークラスとは別に、NSOutlineViewをサブクラス化しよう。しかし、だ。)
@interface ASCOutlineView : NSOutlineView {
}
@end
@implementation ASCOutlineView
- _textBackgroundColor
{
return ([NSColor clearColor]);
}
@end
があると思われますSnow Leopardで表のセルを編集するときに、白いブロックがあなたのHUDを台無しにするのを防ぐ必要があります。
Leopard SDK用にコンパイルされたアプリケーションはもう少しサポートが必要です。 LeopardのtableViewは、レンダリングプロパティをハードコードしているので、選択メソッドをオーバーライドする必要があります。
NSTextFieldCellsは実際にNSTextViewsのラッパーであり、コントロール内で使用できるようになっています。それらは通常、同じtextViewインスタンスを共有します。このインスタンスは、ウィンドウ(またはこの場合はそのサブクラス、パネル)によって管理されます。 NSTableViewは、データを編集するためのシステムUI設定に準拠するようにNSTextFieldCellの設定を変更します。ほとんど。 NSTextFieldCellは、これらの設定をNSTextViewに伝播します。このパイプラインに沿っていつでも、1つまたは2つのメソッドをオーバーライドして、それらのプロパティの値を独自の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];
}