macOS Status Bar apps: Windows and Views

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)
}

Passing data to/from Window and Menu Bar

image