NSStatusItem 和 NSMenuItem 检测换档按下

NSStatusItem and NSMenuItem detect shift press

我正在尝试在单击 shift 按钮时修改 NSStatusItem 中的 NSMenuItems。基本上我想将文本从 "MenuItem123" 修改为 "Shift MenuItem123"

我试过添加

NSEvent.addLocalMonitorForEventsMatchingMask

NSEvent.addGlobalMonitorForEventsMatchingMask

这适用于我的常规 window 应用程序,但对于 NSStatusItem/NSMenuItems 完成块不会被调用或只在菜单未显示时被调用。

您无需监听事件即可显示备选菜单项。您只需要创建两个菜单项并将第二个标记为备选,并将其 keyEquivalentModifierMask 设置为 NSShiftKeyMask。假设您有一个名为 statusItem 的变量,您可以使用以下代码片段:

let menu = NSMenu();

menu.addItemWithTitle("MenuItem123", action:"test:", keyEquivalent:"")
if let shiftItem = menu.addItemWithTitle("Shift MenuItem123", action:"test:", keyEquivalent:"") {
    shiftItem.alternate = true
    shiftItem.keyEquivalentModifierMask = Int(NSEventModifierFlags.ShiftKeyMask.rawValue)
}

statusItem.menu = menu