12

エディター ウィンドウの上部にある Xcode 3 に似た、シンボル ポップアップ ボタンの詳細に取り組んでいます。

NSMenu私のコントローラ オブジェクトは、が表示されているときに表示されるのデリゲートですNSPopUpButton。2 つの方法を実装しnumberOfItemsInMenu:menu:updateItem:atIndex:shouldCancel:メニューが表示される直前にメニューを設定します。

ただし、選択したもののタイトルと画像はNSMenuItem、ユーザーがエディターNSTextViewで選択を変更するか、テキストを変更するたびに変更する必要があります。Xcode の場合と同様です。

私が抱えている問題は、メニューに適切な数のアイテムがまだないため、ユーザーが をクリックしてNSPopUpButtonを表示するNSMenuと、選択されNSMenuItemたアイテムと選択されるべきアイテムが一致しないことです。

NSMenuItemユーザーがクリックしてメニューを開いたときに、最初に強調表示され、追跡されるものを制御する方法があるかどうか疑問に思っています。現状では、常に強調表示して追跡する最初の項目、またはユーザーが以前に項目を選択した場合は、その項目が強調表示されて追跡されます。

できる限り説明しようとしましたが、これが私の問題を示す画像です。

http://imgur.com/izGvh

ユーザーがメニューを開いたときに、強調表示された項目を選択した項目と同じにしたい。何か案は?

4

5 に答える 5

1

あなたの問題を理解しているかどうかはよくわかりませんが、これらのメニュー項目にタグを追加できれば. 例えば

[mMenuItemOne setTag : 1];
[mMenuItemTwo setTag : 2];
[mMenuItemThree setTag : 3];
[mMenuItemFour setTag : 4];}

[_popUp selectItemWithTag: _selectedItem] を使用して任意のメニュー項目を選択できます。

于 2013-06-27T12:06:17.660 に答える
1

私は NSPopupbutton を使用します - それはあなたが望むことをすることができます。多分あなたもそれを隠しますか?

于 2012-11-10T08:14:37.280 に答える
0

NSMenuDelegateこの方法を試しましたか:ハイライトの処理

– menu:willHighlightItem:

NSMenuDelegateプロトコルリファレンス

また、NSMenuItemインデックスをいくつかの変数に保存して、後で使用するために選択したアイテムを追跡することもできます。

于 2012-10-17T16:51:21.873 に答える
0

よくわかりません。マウス選択のハイライト (青い部分) を移動しますか?それともチェックマークを移動しますか?

一般に、チェックマークは変更したいものです。validateMenuItem:メソッドを使用して、メソッドから (アイテムが検証に参加しないように設定されている場合はいつでも)これを行うことができます-setState:

青色のハイライトは、ユーザーのキーボード入力またはマウスの位置を示すものであり、これをいじってはいけません。ユーザーがマウスを 1 ピクセルでも動かした瞬間に元に戻されるため、これを変更しても意味がありません。

とはいえ、の設定するselectedItemと、NSPopUpButtonメニュー全体が移動し、selectedItemがマウスの下に表示されます (マウスがポップアップ ボタンをクリックしたと仮定します)。

ポップアップ ボタンが選択するアイテムを決定した後にメニュー デリゲート メソッドが呼び出された場合、それを使用することはできません。代わりに、おそらくハンドラーselectedItemからポップアップ ボタンのメニューを設定できます。NSPopUpButtonWillPopUpNotification

それも遅すぎると呼ばれる場合は、おそらくサブクラスNSPopupButtonCell化してオーバーライドで実行する必要-attachPopUpWithFrame:inView:があります(ポップアップボタンが選択されているときにクリックせずにスペースキーを押すだけでも機能するはずの場所だと思います)。

于 2014-04-01T12:25:43.113 に答える
0

完全な解決策ではなく、単なるヒントです。

メニューが表示された直後に NSMouseMoved イベントをアプリに投稿してみてください。主な問題は、強調表示するアイテムの位置を検出することです。ほんの出発点です。

于 2012-10-26T01:29:02.997 に答える