2011-02-05 10 views
0

ちょっとした助けが必要です。ウィンドウは常に右上隅に表示されるように設定されていますが、常にキーに設定されていません。ウィンドウにはいくつかのボタンがあり、ボタンをクリックするとウィンドウがキーになりますが、ボタンをクリックしたときにウィンドウがキーからはずれるようにしたい場合は、それを実行します。Objective-C NSWindowキーからウィンドウを外す

ボタンがクリックされたときにウィンドウがキーになるのが理想です。ボタンが呼び出すメソッドでは、ボタンのアクションを実行してキーからウィンドウを削除するステートメントを書きたいと思っています。

ただし、ウィンドウはアプリケーションデリゲートの下で宣言され、ボタンにリンクされたメソッドは別のヘッダーファイルで宣言されます。

誰でもどのように私はこれを行うことができます、どんな助けても大歓迎です。 事前に感謝、サミ。

答えて

1

アプリケーションのアーキテクチャによっては、いくつかの解決策があります。

  1. [[NSApp mainWindow] makeKeyWindow]を送信すると、メインウィンドウがキーになります。

  2. アプリケーションデリゲートがメインウィンドウへの参照を持つ可能性があります。ボタンのクリックを処理するアクションメソッドでは、アプリケーションデリゲートにメインウィンドウをキーにするよう依頼することができます。アプリケーション代理人は[mainWindow makeKeyWindow]を送信します。

  3. アプリケーションデリゲートには、メインウィンドウを管理するウィンドウコントローラへの参照が含まれている可能性があります。ボタンのクリックを処理するアクションメソッドでは、アプリケーションデリゲートにメインウィンドウをキーにするよう依頼することができます。アプリケーションデリゲートはメインウィンドウコントローラにそれを要求し、メインウィンドウコントローラは[[self window] makeKeyWindow]を送信します。

  4. アプリケーションデリゲートは、NSWindowDidResignKeyNotification通知を聞いて、キーである最後のウィンドウへの参照を保持することができます。ボタンのクリックを処理するアクションメソッドでは、アプリケーションのデリゲートにキーステータスをその前のウィンドウに戻すように要求することができます。ウィンドウがあなたの補助ウィンドウである場合、アプリケーション代理人はNSWindowDidResignKeyNotification通知を無視する必要があります。このソリューションは、単一のメインウィンドウがない場合に優れています。

最初の解決策が適用されない場合は、a)はアプリケーションデリゲートは、適切なウィンドウにキーの状態を復元するための責任方法を宣言したプロトコルに準拠することができ、またはb)あなたのアクションメソッドを知らせる通知を投稿することができアクションメソッドが完了したアプリケーション、およびアプリケーションの代理人がその通知をリッスンし、キーステータスを適切なウィンドウに復元させることができます。

アプリケーションデリゲートがキーステータスを復元する動作を実装することを提案したにもかかわらず、他のオブジェクトがその責任を負う可能性があることに注意してください。これは、通知によって提供される固有の疎結合のためにキーステータスを復元するオブジェクトへの参照を取得する必要がないため、通知を使用すると特に簡単です。

+0

助けていただきありがとうございます。質問が誤解されている可能性があります。ウィンドウがキーウィンドウになります。ウィンドウ内でボタンがクリックされたときにウィンドウを終了するメソッドを呼び出すとします。キーであることから。 – Sami

+0

@Sam私の答えは、あなたの補助的なウィンドウがキーの状態を辞める方法を説明しています。ココアは他のウィンドウがどのキーになるべきかを知らないので、単純な '-resignKey'メソッドはありません。したがって、別のウィンドウキーを_makeするのはあなたの責任です._ –

+0

' [NSApp mainWindow] 'は単純に最前面の通常ウィンドウを意味します。 'NSApp'はあなたの「メインウィンドウ」とはどのようなウィンドウを考えているのか分かりません。 –

関連する問題