检查菜单栏应用程序上的按键

问题描述

我正在编写一个使用popover的MacOS菜单栏应用程序。我依靠许多教程来使事情进展。

非常简短,代码看起来像这样:

class AppDelegate: NSObject,NSApplicationDelegate {
    var popover=NSPopover() 
    var statusBarItem: NsstatusItem!

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        //  Popover & Content View
            let contentView = ContentView()
            self.popover.contentViewController = NSHostingController(rootView: contentView)

        //  Menu
            self.statusBarItem = NsstatusBar.system.statusItem(withLength: 18)
            if let statusBarButton = self.statusBarItem.button {
                statusBarButton.title = "☰"
                statusBarButton.action = #selector(togglePopover(_:))               
            }
    }
    
    @objc func togglePopover(_ sender: AnyObject?) {
        let statusBarButton=self.statusBarItem.button!
        func show(_ sender: AnyObject) {
            self.popover.show(relativeto: statusBarButton.bounds,of: statusBarButton,preferredEdge: NSRectEdge.maxY)
        }
        func hide(_ sender: AnyObject) {
            popover.performClose(sender)
        }
        self.popover.isShown ? hide(sender as AnyObject) : show(sender as AnyObject)
    }
}

当单击菜单按钮时,如何检查 option 键是否按下?

解决方法

询问当前事件,修饰符标志是否包含option

func isOptionkeyPressed() -> Bool
{
    return NSApp.currentEvent?.modifierFlags.contains(.option) == true
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...