【问题标题】:Why is my NSMenuItem is disabled when it has an action?为什么我的 NSMenuItem 在有操作时被禁用?
【发布时间】:2020-02-05 13:49:19
【问题描述】:

我正在实现一个自定义NSToolbarItem,它有一个按钮和一个下拉菜单,比如邮件。但是,唯一不起作用的是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)
    }
}

【问题讨论】:

标签: swift appkit nsmenu nsmenuitem nstoolbaritem


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多