macOS Status Bar apps: Windows and Views
April 4, 2023 | Previous part |
Open a window from a status bar item
To open a window from a status bar app, you will insert the Window functions back into AppDelegate, but you must wrap them in an objc function and reference the function using a menu item selector.
var settingsWindow: NSWindow!
statusBarMenu.addItem(
withTitle: "Settings",
action: #selector(AppDelegate.openSettings),
keyEquivalent: ","
)
@objc func openSettings() {
settingsWindow = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 600, height: 600),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false)
settingsWindow.isReleasedWhenClosed = false
settingsWindow.setFrameAutosaveName("Settings")
settingsWindow.center()
settingsWindow.contentView = NSHostingView(rootView: ContentView() )
settingsWindow.makeKeyAndOrderFront(nil)
}