我正在开发我的第一个快捷应用程序,并且正在创建菜单栏按钮。左键单击将执行特定操作,右键单击将下拉菜单。发生的事情是我的左键最初会起作用。我的右键单击不会在第一次单击时弹出菜单,但是在第二次单击时会弹出。如果我不选择操作,然后单击其他使菜单消失的操作,那么我将陷入怪异的循环。左键单击和右键单击都会使菜单出现。

我不明白代码卡在哪里。我在网上找到的所有内容均涉及较旧的代码。

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?

10-08 05:37