1

セルの背景色を個別に設定したいNSForm。NSFormをサブクラス化してオーバーライドすることだと思いました-drawCellAtRow:column:。ただし-drawCellAtRow:column:、セルがフォーカスを受け取ったときにのみ呼び出されます。

私は呼び出しを実験し-setCellBackgroundColorましたNSFormが、それは値ではなく、タイトルの背景を変更します。

私が見つけていないアプローチはありますか?

4

1 に答える 1

1

これはNSFormCellでは不可能だと思います。

私が最初に試したこと:

self.form.drawsCellBackground = YES;
self.form.cellBackgroundColor = [NSColor redColor];

これは、ラベルの後ろにのみ背景を描画しているように見えます。さらにいくつかのテストでは、単一のNSFormCellがラベルフィールドとテキストフィールドの両方にまたがっており、背景が両方の背後に描画されていることが示唆されました。テキストフィールドが上に描画されると、それ自体の背景が赤い色を覆います。

次に、NSFormCellをサブクラス化しました。呼び出される唯一のメソッドはです-drawWithFrame:inView:。この場合も、フレームはラベルフィールドとテキストフィールドの両方にまたがっています。コントロールビューはNSFormです。独自の背景を描画してから呼び出す[super drawWithFrame:inView:]と、上記のように表示され、ラベルの後ろに表示されますが、テキストフィールドの後ろには表示されません。スーパーを呼び出してから背景を描くと、両方の上に表示されます。

NSFormCellの実装は-drawInteriorWithFrame:inView:、別のオーバーライドポイントを呼び出したり、提供したりしません。

同じ問題を設定highlightedして実装してみました。-highlightColorWithFrame:inView:

これがどのように機能するかを理解しようとしている間、NSFormのサブクラス化も試みました。呼び出される唯一の描画関連のメソッドはです-drawRect:。これらのメソッドが呼び出されることはありません:-drawCellAtIndex:、、、。-drawCellAtRow:column:-drawCell:-drawCellInside:

Appleにこれを修正させる以外に、私が目にする唯一の解決策は、NSFormのスーパークラスNSMatrixを使用しようとするか、ラベルとテキストフィールドを使用することだけです。

于 2012-12-11T19:54:43.153 に答える