9

NSMenu階層が表示されるたびに動的に変更できるようにする必要があります(アイテムの追加/削除など)。例えば:

  1. ユーザーはメインメニューで追跡セッションを開始し、サブメニューを選択します
  2. サブメニューを検出して、コードを開いて実行し、変更しようとしています
  3. 追跡を続け、ユーザーは同じサブメニューを再度追跡します:goto 2

したがって、これを行うために、NSMenuDelegateプロトコルを実装するオブジェクトがあります。メソッドmenuNeedsUpdateは、最初は機能しますが(2)、サブメニューを開いた2回目は機能しません。(追跡セッションごとに1回だけ呼び出されます)

メソッドmenuWillOpenは毎回呼び出されますが、ドキュメントにはこのアプローチを使用すると失格と思われる次の警告があります。

この方法では、メニューまたはメニュー項目の構造を変更しないでください。

これを達成する方法はありますか?

4

2 に答える 2

0

NSMenuをサブクラス化し、submenuActionをオーバーライドできます

または、 NSMenuWillSendActionNotificationをサブスクライブすることもできます。

また、参考までに、NSMenuValidationは、項目ごとにメニュー項目を更新するのに適した場所です。

于 2011-03-17T04:04:55.000 に答える
0

menuWillOpenは、サブメニューを初めて追跡するときに1回だけ呼び出されます。その時点で、メニューにデータを入力します。

その後、menuWillOpenは再度呼び出されません。ただし、メニューへの変更はすべてライブで行われます。したがって、メインの親メニューが開いている間、ソースデータが変更されるたびに(または変更を検出できない場合は定期的に)、通常のNSMenuAPIを使用してメニューを更新します。

システムがメニューを追跡している間、メニューの更新に使用する方法が実行されることを確認してください。

于 2012-10-18T09:40:57.607 に答える