You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NSMenuItem自定义View右键上下文菜单不显示问题

问题解决:NSMenuItem自定义视图右键不显示上下文菜单

问题原因

在NSMenuItem的自定义视图中直接调用NSMenu.popUpContextMenu类方法,会与系统菜单的事件处理机制冲突,导致菜单无法正常加载弹出;另外未给菜单项设置目标与动作,也可能导致菜单初始化失败。

解决方案

1. 使用应用实例的弹出方法替代类方法

改用NSApplication.shared.popUpContextMenu,确保菜单关联到当前应用的事件循环,而非仅视图层级。

2. 为菜单项添加目标与动作

即使动作是空实现,也需明确设置,保证菜单能完成初始化流程。

修改后的代码示例

override func rightMouseDown(with event: NSEvent) {
    let contextMenu = NSMenu()
    // 为菜单项设置标题、动作和快捷键
    let testItem = NSMenuItem(title: "Test", action: #selector(testAction), keyEquivalent: "")
    testItem.target = self
    contextMenu.addItem(testItem)
    
    // 通过应用实例弹出菜单
    NSApplication.shared.popUpContextMenu(contextMenu, with: event, for: self)
    
    print(event.description)
}

// 对应的动作实现
@objc func testAction() {
    print("Test菜单项被点击")
}

额外优化:允许视图接收鼠标事件

确保自定义视图能正确响应鼠标事件,可重写acceptsFirstMouse方法:

override func acceptsFirstMouse(for event: NSEvent?) -> Bool {
    return true
}

内容的提问来源于stack exchange,提问作者Tardik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 01:39:55