すべてのセルにカスタムの背景を持つドロップダウンメニューを使用してメニューを作成しようとしています。最初にNSPopUpButtonを適応させようとしましたが、セルの背景画像を変更する方法が見つかりませんでした。setImageを使用すると、テキストが背景の右側にスライドします。次にNSComboBoxに立ち寄りましたが、矢印ボタンを変更する方法が見つかりませんでした。誰かが助けてアイデアを教えてもらえますか?次はカスタムコントローラーを作成しますが、すでに作成されているものを使用したいと思います。
2 に答える
NSComboBox の矢印ボタンをカスタマイズするには、NSComboBoxCell のサブクラスを作成し、そのセルを使用するようにコンボ ボックスを設定する必要があります。IB でコントロールを構成した場合は、そこでセルのクラスを簡単に変更できます。プログラムでコンボ ボックスを作成している場合は、NSComboBox のサブクラスを作成し、+ (Class)cellClass
そのメソッドからカスタム NSComboBoxCell サブクラスをオーバーライドして返します。
今、図面のために。NSComboBoxCell サブクラスでは、オーバーライドする必要があります
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
。
(オーバーライドを試みまし- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
たが、それが提供するセル フレームは、実際のボタン領域を描画する手前で停止します。つまり、テキスト入力領域のみをカバーします。)
カスタム- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
は次のようになります。
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
[super drawWithFrame:cellFrame inView:controlView];
// Constrain to the far right of the provided frame to draw the button
NSRect bounds = NSMakeRect(cellFrame.origin.x + cellFrame.size.width - cellFrame.size.height, cellFrame.origin.y, cellFrame.size.height, cellFrame.size.height);
// Draw your custom button inside the bounds rect
}
あなたの質問を正しく理解できたかどうかわかりません。UI の任意の位置にメニューを表示したい場合: NSMenu はそれを実現するための便利なメソッドを提供します。のドキュメントを参照して+ popUpContextMenu:withEvent:forView:
、ニーズに最適なものを見つけてください+ popUpContextMenu:withEvent:forView:withFont:
。– popUpMenuPositioningItem:atLocation:inView:
このように、好きな位置にメニューを表示できます。
メニュー内に任意のコンテンツを表示したい場合は、 のドキュメントを参照してNSMenuItem
ください- setView:
。これにより、メニュー内にビューを挿入できます。好きな場所にメニューを表示する上記の方法と合わせて、「PopOver」のニーズに対するあらゆる種類のソリューションを作成できます。