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

问题描述 投票:1回答:1

Heres whats going on:

我正在尝试完全以编程方式构建Mac状态栏应用程序。一切似乎都运行正常,即菜单显示在Mac状态栏中,下拉菜单显示它应该如何。但是当我点击菜单项时,没有任何反应。我甚至改变了目标功能,只是做了打印到终端的基本任务,什么也没做。


About the code:

这个问题就在我身边,我想:

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

}
swift macos appkit
1个回答
0
投票

menuItem.target = self

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

  1. 行动menuItem.action: #selector(YOURFUNCTION)
  2. 目标menuItem.target = self

因此,要使您的菜单项正常工作,请使用以下新项替换for循环(在初始化调用中):

for (_, val) in service.list {
    let menuItem = menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
    menuItem.target = self
}
© www.soinside.com 2019 - 2024. All rights reserved.