gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:30:39 24 4
gpt4 key购买 nike

这是怎么回事:

我正在尝试完全以编程方式构建 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??")
}

}

最佳答案

menuItem.target = self

您需要将目标设置为“ self ”。 NSMenuItems 有两个基本要求。一个 Action ,一个目标,

  1. 行动menuItem.action: #selector(YOURFUNCTION)

  2. 目标menuItem.target = self

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

for (_, val) in service.list {
let menuItem = menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
menuItem.target = self
}

关于swift - 分配给 NSMenuItem 的操作似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54816255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com