ホーム > 開発 > NSMenuItemのenabled以外の属性の更新

NSMenuItemのenabled以外の属性の更新

Cocoaでメニューの有効・無効を制御する場合、レスポンダ側にNSMenuValidationを実装します。
対象になるメニューに対して、レスポンダチェーンのどこかでvalidateMenuItem:がYESを返した場合は有効、それ以外の場合は無効に設定されます。

類似の処理として、メニューアイテムにチェックマークを付けたり、タイトルを修正したい事があります。
validateMenuItem:にはメニューアイテムも渡ってくるので、有効を返す前にメニューアイテムにチェックマークを設定してやれば良いかと思いましたが、問題がある事が判りました。
有効・無効の場合とは異なり、メニューアイテムその物を変更してしまっているので、別のタイミングで明示的にチェックマークを外さない限り、マークが付いたままになります。
レスポンダチェーンがどこも反応しない場合に、チェックマークが無い状態に戻ると勘違いしていたのです。

ここを正しく実装するためには、チェックマークを付けたりタイトルを修正する可能性のあるメニューアイテムはすべて、アプリケーションデリゲートのvalidateMenuItem:で初期状態に戻す必要があるという事です。
アプリケーションデリゲートがレスポンダチェーンから外れる事は無いので、必ずメニューを更新する事ができます。

広告
カテゴリー:開発 タグ: ,
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。