系统状态栏中的菜单被禁用

问题描述

 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",keyEquivalent: "B")

        menu.addItem(NSMenuItem.separator())

        let i = NSMenuItem(title: "test",keyEquivalent: "T");
        menu.addItem(i)
        return menu
    }

这会在系统状态栏中创建菜单,但所有项目都已禁用!

有人知道怎么解决吗?非常感谢。

enter image description here

解决方法

菜单验证在响应者链中找不到任何指定操作的实现者,因此禁用它。您必须为每个菜单项指定目标:

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