Search code examples
swiftappkit

Menu in system status bar is disabled


 func createStatusItem() -> NSStatusItem {
        let item = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
        item.button?.image = NSImage(systemSymbolName: "archivebox.fill", accessibilityDescription: "")
        item.menu = createMenu()
        return item;
    }

    func createMenu() -> NSMenu {
        let menu = NSMenu(title: "Cap Status Bar Menu")

        menu.addItem(
                withTitle: "Order a burrito",
                action: #selector(StatusBarFactory.x(_:)),
                keyEquivalent: "A")

        menu.addItem(
                withTitle: "Cancel burrito order",
                action: #selector(StatusBarFactory.x(_:)),
                keyEquivalent: "B")

        menu.addItem(NSMenuItem.separator())

        let i = NSMenuItem(title: "test", action: #selector(StatusBarFactory.x(_:)), keyEquivalent: "T");
        menu.addItem(i)
        return menu
    }

This creates menu in system status bar but all items are DISABLED!

Does anyone know how to fix it? Thanks a lot.

enter image description here


Solution

  • Menu validation does not find any implementor of specified action in responder chain so disable it. You have to specify target for each menu item:

        let item = menu.addItem(
                withTitle: "Order a burrito",
                action: #selector(StatusBarFactory.x(_:)),
                keyEquivalent: "A")
        item.target = _instance_of_StatusBarFactory_here // like StatusBarFactory.shared