2

カスタム ビューを持つステータス アイテムの NSMenu を提供する NSPopUpButton があります。ポップアップ ボタンはリンクのリストを表示します。ユーザーがリストからリンクを選択すると、そのリンクがユーザーのブラウザー (バックグラウンド) に表示されます。

当然、ユーザーがリンクを選択するたびにメニューが閉じます。

これを変更したいと思います: ユーザーがさまざまなリンクをクリックしている間、メニューを開いたままにしておきたいのですが、それらはすべてバックグラウンドで開くことができます。ユーザーが別の場所をクリックすると、メニューが消えます。

これはどのように達成できますか?NSMenuItem をサブクラス化し、マウス クリックを何らかの方法でインターセプトする必要がありますか? ポップアップされたメニューに透明な NSView を重ねて、もう一度クリックを傍受しますか? 私はこれらの提案を気軽に行いますが、これらのいずれかを実装するのに問題があります...オーバーライドの正しいメソッドへのポインタをいただければ幸いです。

4

2 に答える 2

1

メニューを使用する代わりに、折りたたみ可能なボックスを使用することもできます。多くのアプリ (Apple からも提供されています) で見たので、これが複数選択の推奨スタイル ガイドだと思います。開示ボタンをクリックすると、折りたたみ可能なボックスが展開され、必要なすべてのアイテムが解放されます - チェックボックス付きのテーブルビューのように。この場合、このボックスの下にあるビューは、ボックスに干渉しないように下に移動する必要があります。

前

ここに画像の説明を入力

開示ボタンをもう一度クリックすると、ボックスが元の位置に縮小されます。この効果は、メニューを閉じるのと似ています。

于 2016-12-03T20:06:09.480 に答える
0

通常、コントロールを元の意図から大きく曲げてはいけません。ユーザーは、選択後にポップアップ ボタンが閉じることを期待しています。NSPopUpButtonCell にこのような動作を強制する必要はないと思います。そうした場合、コントロールを大幅にサブクラス化および変更することになり、Mac OS X の将来のバージョンで変更または破損する可能性があります。また、作成後にメニューが閉じてしまうとユーザーが考えるユーザビリティの問題についても心配する必要があります。選択。

説明しているメニューボタンのように動作するように、NSView の独自のサブクラスを作成することを検討してください。ユーザーがボタンをクリックした後。スタイル マスクとして NSBorderlessWindowMask を使用して、境界線のない新しい NSWindow を作成する必要があります。そのウィンドウのコンテンツ ビューは、メニュー選択を実装する別のカスタム ビューである必要があります。

于 2009-06-13T18:52:10.410 に答える