首页 > 解决方案 > 为什么我的 NSMenuItem 在有操作时被禁用?

问题描述

我正在实现一个NSToolbarItem具有按钮和下拉菜单的自定义,例如 Mail。但是,唯一不起作用的NSMenuItem是被禁用。无论我做什么,我都无法启用它。知道我在这里做错了什么吗?

class DropdownTypeToolbarItem: NSToolbarItem {
    private var handler: ((NSNumber) -> Void)?

    init(itemIdentifier: NSToolbarItem.Identifier, handler: ((NSNumber) -> Void)?) {
        super.init(itemIdentifier: itemIdentifier)

        self.handler = handler

        let control = NSSegmentedControl(labels: ["Open", ""],
                                         trackingMode: .momentary,
                                         target: self,
                                         action: #selector(open))

        let menu = NSMenu(title: "")
        menu.addItem(withTitle: "Export", action: #selector(export(_:)), keyEquivalent: "")

        control.setMenu(menu, forSegment: 1)
        control.setShowsMenuIndicator(true, forSegment: 1)

        self.view = control
    }

    @objc func open() {
        print("select open")
        self.handler?(0)
    }

    @objc func export(_ sender: Any) {
        print("select export")
        self.handler?(1)
    }
}

标签: swiftappkitnsmenunsmenuitemnstoolbaritem

解决方案


NSToolbarItem 本身不是响应者链的一部分,当菜单项的 为 时,响应者链用于确定是否可以启用target菜单项nil。在这种情况下,您应该target将菜单 iem 的 显式设置为工具栏项。


推荐阅读