我正在开发我的第一个快捷应用程序,并且正在创建菜单栏按钮。左键单击将执行特定操作,右键单击将下拉菜单。发生的事情是我的左键最初会起作用。我的右键单击不会在第一次单击时弹出菜单,但是在第二次单击时会弹出。如果我不选择操作,然后单击其他使菜单消失的操作,那么我将陷入怪异的循环。左键单击和右键单击都会使菜单出现。
我不明白代码卡在哪里。我在网上找到的所有内容均涉及较旧的代码。
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Create the SwiftUI view that provides the window contents.
if let button = statusItem.button {
button.title = "test"
button.action = #selector(self.doSomething(sender:))
button.sendAction(on: [.leftMouseUp, .rightMouseUp])
}
}
@objc func doSomething(sender: NSStatusItem) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp {
// Right button click
let statusBarMenu = NSMenu()
let item1 = NSMenuItem(title:"Quit", action:#selector(self.applicationQuit),keyEquivalent: "")
item1.target = self
statusBarMenu.addItem(item1)
statusItem.menu = statusBarMenu
} else {
// Left button click
print("hello world")
}
}
}
最佳答案
感谢Willeke,我们有了答案。该代码应显示为:
if event.type == NSEvent.EventType.rightMouseUp {
// Right button click
let statusBarMenu = NSMenu()
let item1 = NSMenuItem(title:"Quit", action:#selector(self.applicationQuit),keyEquivalent: "")
item1.target = self
statusBarMenu.addItem(item1)
statusItem.menu = statusBarMenu
statusItem.button?.performClick(nil)
statusItem.menu = nil
}
参考:What is alternative to NSStatusItem.popUpMenu?