ユーザーの選択に応じてnsmenuitemを変更します
-
11-10-2019 - |
質問
私はココアドキュメントベースのアプリケーションに取り組んでいます。ファイルメニューに名前が付けられたメニュー項目があります 「物事をエクスポートする…」. 。このメニュー項目は最初のレスポンダーに接続されており、 mydocument. 。ここまでは順調ですね。
ユーザーの選択に応じて、このメニュー項目のタイトルを変更したいと思います。ユーザーが何も選択していない場合、読む必要があります 「すべてのものをエクスポートする…」, 、ユーザーが選択したものをいくつか持っているとき、それは読むべきです 「選択したものをエクスポートする…」. 。ドキュメントが開いていない場合は、読むだけです 「物事をエクスポートする…」.
このメニュー項目をどこで変更すればよいですか?私はメニュー項目を使用して変更できると考えています Settitle:, 、しかし、どうすればnsmenuitemへの参照を取得できますか?
解決
実装できます -validateMenuItem:
メニュー項目のアクションを処理するレスポンダークラス。ブール(アイテムが有効になっているかどうかを示す)を返す必要がありますが、 NSMenuItem
タイトルを変更するために使用できるパラメーターとして。
どのメニュー項目を扱っているかを決定するには、そのメニュー項目を検査する必要があります action
, 、例:
- (BOOL)validateMenuItem:(NSMenuItem *)item {
if ([item action] == @selector(export:)) {
if (hasSelection) {
[item setTitle:NSLocalizedString(@"Export Selected Things",nil)];
} else {
[item setTitle:NSLocalizedString(@"Export All Things",nil)];
}
}
return YES;
}
所属していません StackOverflow