分配给 NSMenuItem 的操作似乎不起作用

2024-02-20

这是发生的事情:

我正在尝试完全以编程方式构建 Mac 状态栏应用程序。一切似乎都工作正常,即菜单显示在 Mac 状态栏中,下拉菜单显示应有的样子。但是当我单击菜单项时,什么也没有发生。我什至将目标函数更改为只执行打印到终端的基本任务,什么也不做。


关于代码:

我认为问题就在这里:

menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))

该代码应该触发>toggleService 函数。但它没有任何作用。问题可能是由于我只继承自 NSObject 类吗?


The Code

// StatusBar.swift

import Cocoa

class StatusBar: NSObject {

    var menuButton = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
    var menu = NSMenu()
    var service = Service()

    override init() {
        super.init()
        menuButton.button?.image = NSImage(named: NSImage.Name("icon"))
        menuButton.menu = menu
        menu.autoenablesItems = false
        for (_, val) in service.list {
            menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
        }
        menu.addItem(NSMenuItem.separator())
        menu.addItem(NSMenuItem(title: "Quit", action: #selector(quit), keyEquivalent: ""))
    }

    @objc func toggleService(sender: NSMenuItem) {
        print ("Say Something.. anything??")
    }

    @objc func quit(sender: NSMenuItem) {
        print ("Say Something.. anything??")
    }

}

menuItem.target = self

您需要将目标设置为“自我”。 NSMenuItems 有两个基本要求。一个行动,一个目标,

  1. Action menuItem.action: #selector(YOURFUNCTION)

  2. Target menuItem.target = self

因此,为了让你的菜单项正常工作,请将 for 循环(在你的 init 调用中)替换为这个新循环:

for (_, val) in service.list {
    let menuItem = menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
    menuItem.target = self
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分配给 NSMenuItem 的操作似乎不起作用 的相关文章

随机推荐