Swift:右键/左键单击 NSStatusBar

Posted

技术标签:

【中文标题】Swift:右键/左键单击 NSStatusBar【英文标题】:Swift: Right/Left click on NSStatusBar 【发布时间】:2015-03-03 02:06:00 【问题描述】:

我正在构建一个NSStatusBar 应用程序,并希望根据用户在图标上单击左键还是右键来调用不同的函数。

这是我目前所拥有的:

let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)

func applicationDidFinishLaunching(aNotification: NSNotification) 
    let icon = NSImage(named: "statusIcon")
    icon?.setTemplate(true)

    statusItem.image = icon
    statusItem.menu = statusMenu

这样,每次点击都会显示statusMenu。如何区分 mouseEvents?

【问题讨论】:

***.com/questions/38999700/… Detect left and right click events on NSStatusItem (Swift)的可能重复 【参考方案1】:

这个sn-p

func menuSelected (sender:AnyObject) 
  var clickMask: Int = 0
  if let clickEvent = NSApp.currentEvent!   // see what caused calling of the menu action
    // modifierFlags contains a number with bits set for various modifier keys
    // ControlKeyMask is the enum for the Ctrl key
    // use logical and with the raw values to find if the bit is set in modifierFlags
    clickMask = Int(clickEvent.modifierFlags.rawValue) & Int(NSEventModifierFlags.ControlKeyMask.rawValue)
  
  if clickMask != 0  ...  // click with Ctrl pressed

从我的代码中检查是否有 ctrl-click。它位于从这样的菜单项调用的方法中:

let item = NSMenuItem(title: title, action: Selector("menuSelected:"), keyEquivalent: "")

【讨论】:

参见 NSEvent.pressedMouseButtons 您能在您的代码中添加一些 cmets 吗?不幸的是,我不明白那里发生了什么。我也不确定该放在哪里,因为我没有 IBAction。 我也查看了 NSEvent,但没有运气从左/右退出。会尝试更多。我使用 Ctrl-click 来获得状态栏的不同点击变体。 亲爱的 Kilian,有 Swift 3 解决方案吗? 我最后一次尝试使用 Swift3 确实很痛苦。我太老了,不能作为早期采用者工作,将等待 Swift4 成熟后再切换到 Swift3。继续,让 XCode 为您进行转换。在你这样做之前保存你的工作:-/

以上是关于Swift:右键/左键单击 NSStatusBar的主要内容,如果未能解决你的问题,请参考以下文章

Swift:10.10 中的 NSStatusItem 菜单行为(例如,仅在鼠标右键单击时显示)

C#怎么判断是鼠标左键单击还是右键单击?

鼠标左键单击的脚本vbscript

OD怎样给鼠标左键单击下断点

是否可以检测到右键单击浏览器上下文菜单上的左键单击?

WPF 之 左键弹出操作菜单,并禁用右键菜单