【问题标题】:Issue with processing left and right click on NSStatusItem处理左键和右键单击 NSStatusItem 的问题
【发布时间】:2019-11-12 04:14:38
【问题描述】:

我正在开发我的第一个 swift 应用程序,并且正在创建一个菜单栏按钮。左键单击将执行特定操作,右键单击将下拉菜单。发生的事情是我的左键单击最初会起作用。我的右键单击不会在第一次单击时弹出菜单,但在第二次单击时会弹出菜单。如果我不选择该操作,然后单击其他任何使菜单消失的地方,我最终会进入一个奇怪的循环。左键单击和右键单击都会显示菜单。

我无法理解代码卡在哪里。我在网上找到的所有内容都是指较旧的代码。

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")

        }

    }

}

【问题讨论】:

标签: objective-c swift xcode macos


【解决方案1】:

感谢 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?

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多