我一直在尝试开发一个位于Mac状态栏中的简单程序。我需要它,这样如果你左键单击它会运行一个函数,但如果你右键单击它会显示一个带有About和Quit项目的菜单。
我一直在寻找,但我能找到的只是命令或控制点击建议,但我宁愿不走这条路。
提前致谢,感谢任何帮助!
答案 0 :(得分:20)
Swift 3
let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength)
if let button = statusItem.button {
button.action = #selector(self.statusBarButtonClicked(sender:))
button.sendAction(on: [.leftMouseUp, .rightMouseUp])
}
func statusBarButtonClicked(sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == NSEventType.rightMouseUp {
print("Right click")
} else {
print("Left click")
}
}
Swift 4
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
if let button = statusItem.button {
button.action = #selector(self.statusBarButtonClicked(_:))
button.sendAction(on: [.leftMouseUp, .rightMouseUp])
}
func statusBarButtonClicked(sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp {
print("Right click")
} else {
print("Left click")
}
}
https://samoylov.eu/2016/09/14/handling-left-and-right-click-at-nsstatusbar-with-swift-3/
提供较长的帖子答案 1 :(得分:0)
在 Swift 5 中,
我就是这样工作的。 通过参考上述答案,我能够检测到是右键单击还是左键单击。
然而,一旦你右击,你就只能一直显示NSMenu。
然后,我添加 statusItem.button?.performClick(nil)
& statusItem?.menu = nil
您可以添加 statusItem?.popUpMenu(menu)
,但它在 macOS 10.14 中已折旧。 (但效果很好。)
最后,如果左键单击,它会运行一个函数。如果右键单击,它会运行退出等菜单项。
感谢之前回答的人!
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishedLaunching(_ notification: Notification) {
// .....
// .....
if let button = statusItem?.button {
button.image = NSImage(named: "iconImage")
button.action = #selector(self.statusBarButtonClicked(_:))
button.sendAction(on: [.leftMouseUp, .rightMouseUp])
}
// Add Menu Item for NSMenu
menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
}
@objc func statusBarButtonClicked(_ sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp {
print("Right Click")
statusItem?.menu = menu
statusItem?.button?.performClick(nil)
// statusItem?.popUpMenu(menu)
statusItem?.menu = nil
} else {
print("Left Click")
togglePopover(sender)
}
}
}