这是怎么回事:
我试图建立一个Mac状态栏应用程序完全以编程方式。一切似乎都很正常,也就是说,菜单显示在Mac状态栏中,下拉菜单显示了它应该如何显示。但当我单击菜单项时,什么也没有发生。我甚至将目标函数更改为只执行打印到终端的基本任务,什么也不做。
关于代码:
我认为问题出在这里的某个地方:
menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
该代码应该会触发> toggleService函数。但它什么也做不了。这个问题会不会是因为我只继承了NSObject类?
《守则》
// 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??")
}
}
发布于 2019-02-22 05:11:52
menuItem.target = self
您需要将目标设置为“self”。NSMenuItems有两个基本要求。一个动作,一个目标,
menuItem.action: #selector(YOURFUNCTION)
menuItem.target = self
因此,要让菜单项正常工作,请将for循环(在init调用中)替换为以下新循环:
for (_, val) in service.list {
let menuItem = menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
menuItem.target = self
}
https://stackoverflow.com/questions/54816255
复制相似问题