[英]Issue with processing left and right click on NSStatusItem
我正在開發我的第一個 swift 應用程序,並且正在創建一個菜單欄按鈕。 左鍵單擊將執行特定操作,右鍵單擊將下拉菜單。 發生的事情是我的左鍵單擊最初會起作用。 我的右鍵單擊不會在第一次單擊時彈出菜單,但在第二次單擊時會彈出菜單。 如果我不執行 select 操作,而是單擊使菜單消失的其他任何地方,我將陷入一個奇怪的循環。 左鍵單擊和右鍵單擊都會顯示菜單。
我無法理解代碼卡在哪里。 我在網上找到的所有內容都指的是舊代碼。
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
}
class AppDelegate: NSObject, NSApplicationDelegate {
private var menuBarIcon: NSStatusItem!
func applicationDidFinishLaunching(_ aNotification: Notification) {
createMenuBarIcon()
}
}
// Dock Icon
extension AppDelegate {
func createMenuBarIcon() {
self.menuBarIcon = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
self.menuBarIcon?.button?.toolTip = "FileBo"
self.menuBarIcon?.button?.action = #selector(menuBarIconClicksAction(_:))
self.menuBarIcon?.button?.sendAction(on: [.leftMouseUp, .rightMouseUp])
self.menuBarIcon?.button?.target = self
let icon = NSImage(named: "MenuBarAppIcon")
icon?.size = .init(width: 20, height: 20)
self.menuBarIcon?.button?.image = icon
}
func destroyMenuBarIcon() {
self.menuBarIcon = nil
}
}
// Dock Menu
extension AppDelegate {
@IBAction func menuBarIconClicksAction(_ sender: AnyObject) {
guard let event = NSApp.currentEvent else { return }
if event.type == NSEvent.EventType.rightMouseUp {
menuBarIcon.menu = dockContextMenu(NSApplication.shared)
menuBarIcon.button?.performClick(nil)
menuBarIcon.menu = nil
} else {
toggleMainWnd()
}
}
func dockContextMenu(_ sender: NSApplication) -> NSMenu {
let dockMenu = NSMenu()
dockMenu.addItem( NSMenuItem(title: String(localized: "Show/Hide FileBo"), action: #selector(ToggleWndFileBo(_:)), keyEquivalent: "") )
dockMenu.addItem( NSMenuItem(title: String(localized: "Quit FileBo") , action: #selector(QuitFileBo(_:)), keyEquivalent: "") )
return dockMenu
}
@IBAction func QuitFileBo(_ sender: AnyObject) {
NSApplication.shared.terminate(nil);
}
@IBAction func ToggleWndFileBo(_ sender: AnyObject) {
toggleMainWnd()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.