これは自動的には起こりませんが、Dockアイコンをクリックすると自動的にアプリケーションウィンドウが開きたいと思っています。ドックアイコンをクリックしたときにアプリケーションウィンドウを開くにはどうすればよいですか?
私はアプリを開くとウィンドウが自動的に開きますが、ウィンドウの十字をクリックしてもアプリケーションは実行したままにしておくと、ドックアイコンをクリックするとウィンドウが開かれません。
これは自動的には起こりませんが、Dockアイコンをクリックすると自動的にアプリケーションウィンドウが開きたいと思っています。ドックアイコンをクリックしたときにアプリケーションウィンドウを開くにはどうすればよいですか?
私はアプリを開くとウィンドウが自動的に開きますが、ウィンドウの十字をクリックしてもアプリケーションは実行したままにしておくと、ドックアイコンをクリックするとウィンドウが開かれません。
は、アプリのデリゲートに- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
を実装します。戻り値の詳細については、ドキュメンテーションを確認してください。
ドキュメントベースのアプリケーションと非ドキュメントベースのアプリケーションは、動作が多少異なります。ドキュメントベースのアプリケーションのドックアイコンがクリックされたときに開いているウィンドウがない場合は、新しいドキュメントが作成されます。非ドキュメントベースのアプリケーションのドックアイコンがクリックされたときに開いているウィンドウがない場合、何もしません。
アプリケーションがアクティブになると、ドキュメントベースのアプリケーションが新しいタイトルのないドキュメントを自動的に開きます。ドキュメントベースではないアプリケーションを指していると仮定しています。
アプリケーション代理人にapplicationDidBecomeActive:メソッドを実装し、ウィンドウを開く/表示します。
編集:Delegates上
一部の情報。
Opening and Closing Windowsの一部の情報及びNSWindow API
これは、非文書ベースのアプリケーションのメインウィンドウを閉じた後に画面に戻すために行うことです。これが正しい方法ではないかもしれないことは分かっていますが、これまでのところ私のために働いています。
AppDelegateでこれを実装すると、ウィンドウは同じオブジェクトのインスタンス変数として定義されます。
- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender
{
[window makeKeyAndOrderFront:self];
return NO;
}
もっと良い解決策をお持ちの方は、返信してください。ありがとう!リニューアルオープンウィンドウはもうマウスイベントに反応しなかった受け入れ答えで
:受け入れ答えに追加する
私もこれを理解しようとしていました(ドキュメントベースのアプリケーション用に別のウィンドウを表示する方法)、これは完璧に機能しました! – Kyle
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
{
if (flag) {
return NO;
}
else
{
[YourWindow makeKeyAndOrderFront:self];// Window that you want open while click on dock app icon
return YES;
}
}
Aソリューション。
受け入れられた回答を使用する場合は、IBのウィンドウの属性インスペクタで「終了時に解放する」チェックボックスをオフにする必要があります。これにより、応答しないウィンドウの問題が修正されます。
他の人が指摘しているように、applicationShouldHandleReopen
の非ドキュメントアプリで閉じたウィンドウを再び開く方法は正しい方法です。私が追加したい唯一の変更は、NSApplication
の可視と不可視のリスト.windows
を繰り返し、必要なウィンドウを確認することで、どのウィンドウを再表示する必要があるかを確認する柔軟性の高い方法です。
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if flag == false {
for window in sender.windows {
if (window.delegate?.isKind(of: WelcomeWindowController.self)) == true {
window.makeKeyAndOrderFront(self)
}
}
}
return true
}
付録
ウィンドウが隠されていた場合、ユーザーがアプリのDockアイコン、そうapplicationShouldHandleReopen
メソッドを実装する必要はありませんをクリックしますときa)は、それが自動的に示されたことになります。
b)チェック「閉鎖時にリリース」オプションは、上記の動作に何らかの影響を与えません。
これは自動的に発生します。あなたはもっと具体的になりますか? –