2011-01-17 21 views
0

私はCocoaドキュメントベースのアプリケーションを開発中です。私はという名前のファイルメニューにメニュー項目を持っています。 "Export Things ..."。このメニュー項目は最初のレスポンダに接続され、MyDocumentのセレクタを呼び出します。ここまでは順調ですね。ユーザの選択に応じてNSMenuItemを変更する

このメニュー項目のタイトルは、ユーザーの選択に応じて変更したいと考えています。ユーザーに何も選択されていない場合は、「すべてのものをエクスポート...」と表示されます。ユーザーには何か選択されている場合、「選択したものをエクスポート...」と表示されます。開いている文書がない場合は、「物をエクスポート...」と読みます。

このメニュー項目はどこで変更する必要がありますか? setTitle:を使用してメニュー項目を変更することができますが、どのようにNSMenuItemへの参照を取得できますか?

答えて

5

-validateMenuItem:は、メニュー項目の処理を処理するレスポンダクラスに実装できます。 BOOL(アイテムが有効かどうかを示します)が返されますが、タイトルを変更するためのパラメータとして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; 
} 
+0

完全に動作します。わずかな問題は、ドキュメントを閉じるときにメニュー項目がデフォルトのタイトルにリセットされないことです。とにかく灰色になっているので、それは受け入れられると思います。 –

関連する問題