Updated
Nov 22, 2019 10:28 AM
Created
Nov 9, 2019 7:28 PM
Tags
SwiftMemo
Keywords
MacApp/CocoaApp macOSアプリのことをなんて呼べばいいのか分かりませんが、
とりあえず、macOS Appと呼びましょうか。
これを作り始めて真っ先にハマるのが、
アプリを起動するとWindowが表示されるが、これを閉じたあとにDockアイコンをクリックすることで表示するにはどうしたらよいか?
という問題です。
毎回調べるので、やっと自分のノートにも書いておくとします。
前提、NSWindowを自動で解放されないようにする
最初の前提として、表示しているWindowが再表示可能な状態になっていることを確認します。
window.isReleasedWhenClosed = false
これがデフォルトではtrueなようで、Windowを閉じればリリースされます。
NSWindowの参照を保持していたとしても、実体はなくなり、ポインタが残るだけのような状態となります。
なので、まずはWindowを閉じてもリリースされないように、Windowの設定を上記のように設定しておきます。
というところまでが、まず前提
Dock アイコンのクリックをハンドルする
DockアイコンがクリックされるとAppDelegateの次のメソッドが呼び出されます。
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool
例えば次のようなコードを記述すればNSApplicationが持つ、すべてのWindowを表示することができます。
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
sender.windows.forEach {
$0.makeKeyAndOrderFront(self)
}
return true
}
Nov 22, 2019
ちょっと追記
NSWindowを閉じるとDockからアイコンが消える問題の対処法