swift - 为什么我的 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)
}
}
解决方案
NSToolbarItem 本身不是响应者链的一部分,当菜单项的 为 时,响应者链用于确定是否可以启用target
菜单项nil
。在这种情况下,您应该target
将菜单 iem 的 显式设置为工具栏项。
推荐阅读
- php - php返回中的额外引号
- python - 为什么在 Django 信号中如果块为真而执行其他块?
- python - 从 pandas 数据框列中删除前 n-1 个零
- android - Appbar 滚动视图行为
- c# - 我是否必须为 PostgreSQL 测试设置最小起订量数据库和输入设置?
- android - 使用 android 架构组件指定的 mvvm 模式时,我的视图模型是否可以从视图中监听事件?
- c++ - 如何在 beaglebone black 上用 c++ 创建这么多线程
- git - 我们可以将文件夹中的已提交文件 git 撤消到目标分支吗?
- python - 发送 UDP 到本地服务器,但不通过环回接口
- laravel-5 - 如何在 eloquent 查询本身中消除具有预先加载但为空的关系的记录