2

セルベースの NSTableView をビューベースに移行しています。NSCell では、セルが強調表示されているかどうかを判断する (たとえば、テキストを黒ではなく白で描画する) ために、NSCellhighlightedプロパティを調べました。

これの NSView バージョンは何ですか? ドキュメントでこのようなものを見つけることができません。

4

1 に答える 1

0

これを行う最も簡単な方法は、単に NSTableCellView をサブクラス化することです。すべてのドキュメントには、 NSTableCellView または NSView のいずれかをサブクラス化できることが記載されています。たとえば、Table View Programming Guide for Mac :

NSTableCellView オブジェクト (またはカスタム ビュー) をオブジェクト ライブラリからテーブル ビューの適切な列にドラッグします。... 通常、ビュー クラスは NSTableCellView のサブクラスです。

これが何であるか、またはなぜそれを使用したいかについては述べていません。NSTextField と NSImageView を持つ NSView のように見えますが、それだけです。これらのビューを作成していない場合は、このクラスを無視して NSView をサブクラス化するのが魅力的です。

興味深いことに、NSTableCellView に NSTextFields がある場合 (textFieldこのプロパティを使用しない場合でも!)、それらは自動的に正しい明るい/暗い色を使用します。

特に、backgroundStyleNSTableCellView のプロパティが、テキスト値を実際に変更する原因になっているようです。ドキュメントには次のように記載されています。

デフォルトの実装は、setBackgroundStyle: を実装する、または setBackgroundStyle: に応答する NSCell クラスを持つ NSControl であるすべてのサブビューへの呼び出しを自動的に転送します。

もちろん、NSTextField は NSCell を持つ NSControl であるため、これが呼び出されます。

Apple のドキュメントでは明確ではありません("this" は何を指しているのでしょうか?)、NSTableView は-setBackgroundStyle:それを定義する任意のビューを呼び出すようです。したがって、NSTableCellView をサブクラス化したくない場合は、独自の NSView にプロパティを追加することもできます。

var backgroundStyle: NSBackgroundStyle

描画コードにそれを使用させます。

于 2016-08-23T00:35:27.353 に答える