4

次のようなコンボ ボックスを実装するよう求められます。

ここに画像の説明を入力

これがNSComboBox と大きく異なることは明らかです:
<1> テキスト フィールドの横にあるボタンをカスタマイズする必要があります
<2> これはさらに重要です: 追加の "クロス" ("削除" アクションを示すボタン) があります) コンボ アイテムのそれぞれで。

どうすればこの効果を達成できますか? インターネットで検索しましたが、答えが見つかりません。これを何にすべきか、または NSComboBox クラスのサブクラス化またはカスタマイズの例を教えてください。

4

1 に答える 1

4

NSComboBox はビューですが、理由からここでは説明しませんが、そのインターフェイスは付随するセル クラスNSComboBoxCellによって描画されます。カスタム描画の場合、通常はセル タイプ (この場合は NSComboBoxCell) をサブクラス化し、必要なすべての描画をカスタム セル サブクラスに実装してから、ビューで-setCellClass:or-setCell:メソッドを使用してセルを使用する必要があります。

ただし、この場合、NSComboBox は NSTextField を継承し、NSComboBoxCell は NSTextFieldCell を継承するため、両方とも既に-setBackgroundColor:-setTextColor:を実装しています。そのため、白い背景と青いテキストを簡単に描画できます。

NSComboBox が「ドロップダウン メニュー」をどのように描画するのかはわかりません。それをカスタマイズする方法はわかりませんが、可能だと確信しています。おそらく、NSCell の描画メソッドをいじってみる必要があるでしょう。

最後の問題は、クロスをテキスト フィールド内に配置することです。上記の NSCell の描画メソッドを使用して、クロスの描画を実装する必要があります。ただし、マウスのクリックをインターセプトするには、NSView でそれを行う必要があります (NSCell は対話を処理しないため)。これは、NSComboBox をサブクラス化して、クロスが描画されているビューの部分にマウスがいつ入ったかを追跡する必要があることを意味します。

これはかなり複雑なので、別の方法があるかもしれません。NSPopoverを知っていますか?

NSPopover

NSPopover で同様のものを実装する方がはるかに簡単です。ポップオーバーはビューを保持するので、NSCell メソッドをいじる必要はありません。ポップオーバーには、名前のリストと NSButton (クロス) を含めることができます。

于 2014-01-26T12:48:44.800 に答える