8

メニュー処理の非常に基本的なことを学ぼうとしています。私のテストアプリのメニューバーには、「TestApp」、「File」、「Help」の3つのメニューがあります。次のように呼び出すだけで、これらのメニューを完全に削除できることがわかりました。

NSMenu* rootMenu = [NSApp mainMenu];
[rootMenu removeItemAtIndex:2];

ただし、一時的に無効にしたい(グレー表示にしたい)だけです。これを行うための同様に簡単な方法はありますか?

4

1 に答える 1

7

あなたの質問を誤解しているかもしれませんが、システムのメニューバーに表示されるメニューの実際のタイトルをグレーアウトできるようにしたいようです([ファイル]メニューをグレーアウトするなど)。それが可能かどうかはわかりませんが、 Appleのヒューマンインターフェイスガイドラインに違反していることは確かです。

メニューのすべてのコマンドが同時に使用できない(暗くなる)場合でも、メニューのタイトルは暗くならずに表示されます。ユーザーは、現在利用可能かどうかに関係なく、メニューの内容を常に表示できる必要があります。

したがって、この問題の本当の解決策は、アプリケーションが特定の状態にあるときに、特定のメニュー内のすべてのメニュー項目をグレー表示できるようにすることです。これを行うには、NSUserInterfaceValidationsプロトコルを実装します。メソッドを実装するだけで済みます- (BOOL)validateUserInterfaceItem:。通常、このメソッドを実装するときは、検証するユーザーインターフェイス項目のセレクターを確認し、有効にする必要がある場合はYESを返し、有効にしない場合はNOを返します(メニュー項目がグレー表示されます)。

于 2010-01-18T15:12:56.183 に答える