2011-07-21 8 views
1

私が作ったシンプルな16進エディターのGUIを作ろうとしています。しかし、デフォルトのメニュー項目(「開く...」、「保存」など)を有効にすることはできません。何をしても、それらは常にグレー表示され、クリックできません。カカオアプリケーションでデフォルトで作成されるさまざまなメニュー項目を有効にするにはどうすればよいですか?

私は、私はXcodeの、Interface Builderのに新しいです唯一の方法-(IBAction)openDocument:(id)sender;を持つファーストレスポンダオブジェクトの受信アクションopenDocument:だけでなく、新しいクラス名FileMenuController.mを作ることに「開く...」メニュー項目をリンクしようとしていますObjective-Cを使用して、どのように処理するかについては紛失してしまいます。

注:これはドキュメントベースのアプリケーションではありません。

ありがとうございました!

答えて

7

あなたは正しい考えを持っています。 Enabling Menu Itemsで説明されているように、メニュー項目を有効にするには2通りの方法があります。自動有効化機能を使用すると、システムはレスポンダチェーンをチェックして、メニュー内の各項目のアクションを実装するオブジェクトを探します。適切なアクションを持つレスポンダを見つけたら、そのメニュー項目を有効にします。

したがって、メニュー項目を最初のレスポンダに接続し、FileMenuControllerクラスで同じアクションを実装しました。あなたがする必要がある他のものは以下のとおりです。

  • それはFileMenuControllerのインスタンスを作成し、それがレスポンダチェーンの一部だということを確認してくださいレスポンダチェーン
  • の一部とすることができるように、NSResponderからFileMenuController継承していることを確認してください。

実際には、ファイルメニューを管理するためだけに別のオブジェクトは必要ありません。代わりに、通常はレスポンダチェーンの一部であり、ドキュメントを開くことは、アプリケーションが(ウィンドウやビューとは反対に)何かであるため、アプリケーションのデリゲートに通常-openDocument:アクションを配置します。 Save、Save As、Close、Printなどの同じメニュー内の他のコマンドは、アプリケーションデリゲートではなく、ドキュメント、ウィンドウコントローラ、またはドキュメント/ファイルを管理するオブジェクトによって実装されます。このようにして、Openコマンドはほとんど常に有効になります(アプリケーションデリゲートは常にレスポンダチェーン内にあるため)。ただし、Save、Close、Printは、これらのコマンドを処理するためのドキュメントがある場合にのみ有効になります。

完全性を保つために、メニューアイテムを有効にするもう1つの方法は手動で行われ、各アイテムの有効/無効のステータスを具体的に設定します。私はこれがあなたがこの仕事のために欲しいものだとは思わない。

関連する問題