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

Posted

技术标签:

【中文标题】检查菜单栏应用程序上的按键【英文标题】:Checking for key down on menu bar application 【发布时间】:2020-10-05 07:03:48 【问题描述】:

我正在编写一个使用 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键是否按下?

【问题讨论】:

【参考方案1】:

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

func isOptionkeyPressed() -> Bool

    return NSApp.currentEvent?.modifierFlags.contains(.option) == true

【讨论】:

谢谢。 NSApp.currentEvent 正是我所需要的。

以上是关于检查菜单栏应用程序上的按键的主要内容,如果未能解决你的问题,请参考以下文章

菜单栏应用程序的自定义视图上的 mouseDown 问题

如何在锁定屏幕上保持 osx 上的菜单栏应用程序“活动”?

menu键是啥意思?

Xcode 7 UITesting 用于 OS X 上的菜单栏应用程序

求教Android去掉虚拟按键全屏显示的方法

您如何在 javascript 中捕获 Mac 菜单栏选择?