セルベースの NSTableView をビューベースに移行しています。NSCell では、セルが強調表示されているかどうかを判断する (たとえば、テキストを黒ではなく白で描画する) ために、NSCellhighlighted
プロパティを調べました。
これの NSView バージョンは何ですか? ドキュメントでこのようなものを見つけることができません。
セルベースの NSTableView をビューベースに移行しています。NSCell では、セルが強調表示されているかどうかを判断する (たとえば、テキストを黒ではなく白で描画する) ために、NSCellhighlighted
プロパティを調べました。
これの NSView バージョンは何ですか? ドキュメントでこのようなものを見つけることができません。
これを行う最も簡単な方法は、単に NSTableCellView をサブクラス化することです。すべてのドキュメントには、 NSTableCellView または NSView のいずれかをサブクラス化できることが記載されています。たとえば、Table View Programming Guide for Mac :
NSTableCellView オブジェクト (またはカスタム ビュー) をオブジェクト ライブラリからテーブル ビューの適切な列にドラッグします。... 通常、ビュー クラスは NSTableCellView のサブクラスです。
これが何であるか、またはなぜそれを使用したいかについては述べていません。NSTextField と NSImageView を持つ NSView のように見えますが、それだけです。これらのビューを作成していない場合は、このクラスを無視して NSView をサブクラス化するのが魅力的です。
興味深いことに、NSTableCellView に NSTextFields がある場合 (textField
このプロパティを使用しない場合でも!)、それらは自動的に正しい明るい/暗い色を使用します。
特に、backgroundStyle
NSTableCellView のプロパティが、テキスト値を実際に変更する原因になっているようです。ドキュメントには次のように記載されています。
デフォルトの実装は、setBackgroundStyle: を実装する、または setBackgroundStyle: に応答する NSCell クラスを持つ NSControl であるすべてのサブビューへの呼び出しを自動的に転送します。
もちろん、NSTextField は NSCell を持つ NSControl であるため、これが呼び出されます。
Apple のドキュメントでは明確ではありませんが("this" は何を指しているのでしょうか?)、NSTableView は-setBackgroundStyle:
それを定義する任意のビューを呼び出すようです。したがって、NSTableCellView をサブクラス化したくない場合は、独自の NSView にプロパティを追加することもできます。
var backgroundStyle: NSBackgroundStyle
描画コードにそれを使用させます。