- メインメニューのウィンドウアイテムサブメニューとしていくつかのサブメニューを挿入しました
- NSObject から継承されたオブジェクトのインスタンス (クラス名は MenuController と仮定しましょう) があり、NSMenuDelegate メソッドから 2 つをサポートしています。 – numberOfItemsInMenu: – menu:updateItem:atIndex:shouldCancel:
- このインスタンスは、実行時に起動するために Blue-Object として NIB に追加されました
- サブメニューのデリゲートとして構成された手順 2 ~ 3 のオブジェクト (手順 1)
これで、実行時にサブメニュー コンテンツを提供できるようになりました。
次に、次のことを行います。プロトコルとデリゲートを介して実際のサブメニューにマップされた配列 (メニュー タイトルを含む MenuController 内) に新しい項目を追加したり、古い項目を削除したりできます。すべて正常に動作します。ただし、動的なメニュー項目にショートカットを割り当てるのが好きです。CMD-1、CMD-2、CMD-3など
ウィンドウ / MySubmenu / MyItem1 CMD-1、MyItem2 CMD-2、...
したがって、いくつかのアイテムを呼び出すには、Window / MySubmenu / MyItem に移動してマウスでクリックしたくないので、CMD-3 などのショートカットを 1 つだけ押してアイテムを呼び出します。
わかりました、定期的に期待どおりに動作します。しかし、通常、ネストされたサブメニューの変更についてメイン メニューに通知する方法はありません。問題を再現するための 1 つの安定した方法 - 削除済みの代わりに新しいアイテムを作成した後、いくつかのアイテムを削除して、それに割り当てられた古いショートカットを押してみてください - ビンゴ - 現在のサブメニュー コンテンツを表示するために Window / MySubmenu に移動する前にショートカットが機能しません.
メインメニューにサブメニューを強制的に再構築する方法がわかりません...私は試しました: [[NSApp mainMenu] update] と、NSMenuDidAddItemNotification、NSMenuDidRemoveItemNotification、NSMenuDidChangeItemNotification を送信するために NSNotificationCenter を使用したゲーム
サブメニューへのアウトレットを試み、メソッドを明示的に更新するようにしました-方法はありません... AppKitがデリゲートメソッドを呼び出す場合があります-そして、何も呼び出したくない場合もあります。ランダムな戦略のように見えます。
「何らかの呼び出し」の後、サブメニューが内部配列の変更後に実際の状態になることを確認するにはどうすればよいですか?