0

すべてのセルにカスタムの背景を持つドロップダウンメニューを使用してメニューを作成しようとしています。最初にNSPopUpButtonを適応させようとしましたが、セルの背景画像を変更する方法が見つかりませんでした。setImageを使用すると、テキストが背景の右側にスライドします。次にNSComboBoxに立ち寄りましたが、矢印ボタンを変更する方法が見つかりませんでした。誰かが助けてアイデアを教えてもらえますか?次はカスタムコントローラーを作成しますが、すでに作成されているものを使用したいと思います。

4

2 に答える 2

4

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
}
于 2012-01-20T23:59:08.197 に答える
1

あなたの質問を正しく理解できたかどうかわかりません。UI の任意の位置にメニューを表示したい場合: NSMenu はそれを実現するための便利なメソッドを提供します。のドキュメントを参照して+ popUpContextMenu:withEvent:forView:、ニーズに最適なものを見つけてください+ popUpContextMenu:withEvent:forView:withFont:– popUpMenuPositioningItem:atLocation:inView:このように、好きな位置にメニューを表示できます。

メニュー内に任意のコンテンツを表示したい場合は、 のドキュメントを参照してNSMenuItemください- setView:。これにより、メニュー内にビューを挿入できます。好きな場所にメニューを表示する上記の方法と合わせて、「PopOver」のニーズに対するあらゆる種類のソリューションを作成できます。

于 2013-03-22T10:40:34.823 に答える