2

アプリの起動時にメイン ウィンドウが表示されるアプリケーションを作成しています。ウィンドウが閉じられても、アプリを (メニュー バー メニューを使用して) 実行したままにし、ユーザーがドック アイコンをもう一度クリックした場合は、メイン ウィンドウを再び表示したいと考えています。

私はそこまでの道のりの約 90% です。メイン ウィンドウが Cmd-W で閉じられた後もアプリは適切に実行され続けます。「閉じたら解放する」がオフになっているため、ウィンドウを [makeKeyAndOrderFront:] で表示することができます。ドックアイコンをクリックすると再び。

このパズルで唯一欠けているピースは、実際のドック アイコンのクリックを傍受することです。

このトピックに関する他のスレッドでは、ウィンドウ コントローラーに applicationShouldHandleReopen:hasVisibleWindows: または applicationShouldOpenUntitledFile: のいずれかを実装することを推奨しています。私は両方を実行しましたが、どちらも呼び出されませんでした。

他のアイデアはありますか?

4

2 に答える 2

2

このトピックに関する他のスレッドでは、ウィンドウ コントローラーに applicationShouldHandleReopen:hasVisibleWindows: または applicationShouldOpenUntitledFile: のいずれかを実装することを推奨しています。

これは、ウィンドウ コントローラーがアプリケーションのデリゲートである場合にのみ当てはまります。これは、アプリケーションがこれらのメッセージを送信するオブジェクトです。

ただし、ウィンドウ コントローラーをアプリケーションのデリゲートにすることはしません。私は通常、それらを 2 つの別個のオブジェクトにします。アプリケーションのデリゲートとなるオブジェクトを 1 つ作成し、そのオブジェクトが関連するデリゲート メッセージを受信したら、ウィンドウ コントローラーにメッセージを送信して、必要なことは何でも行うように指示します。

実際、私がシングル ウィンドウ アプリで通常行っていることは、アプリケーションのデリゲートにウィンドウ コントローラーを作成させて所有させることです。WC を破棄することでウィンドウの閉鎖に応答できます。また、WC があるかどうかを確認し、そうでない場合は作成する (したがって、ウィンドウを再度開く) ことで、再開に応答できます。

于 2012-09-29T07:03:43.453 に答える
0

で使用[NSApp setDelegate:self];awakeFromNibます。

于 2012-09-29T06:00:32.197 に答える