首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >分配给NSMenuItem的操作似乎不起作用

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

Stack Overflow用户
提问于 2019-02-22 05:09:53
回答 1查看 208关注 0票数 2

这是怎么回事:

我试图建立一个Mac状态栏应用程序完全以编程方式。一切似乎都很正常,也就是说,菜单显示在Mac状态栏中,下拉菜单显示了它应该如何显示。但当我单击菜单项时,什么也没有发生。我甚至将目标函数更改为只执行打印到终端的基本任务,什么也不做。

关于代码:

我认为问题出在这里的某个地方:

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

该代码应该会触发> toggleService函数。但它什么也做不了。这个问题会不会是因为我只继承了NSObject类?

《守则》

代码语言:javascript
复制
// 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??")
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 05:11:52

menuItem.target = self

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

  1. 操作menuItem.action: #selector(YOURFUNCTION)
  2. Target menuItem.target = self

因此,要让菜单项正常工作,请将for循环(在init调用中)替换为以下新循环:

代码语言:javascript
复制
for (_, val) in service.list {
    let menuItem = menu.addItem(NSMenuItem(title: val, action: #selector(toggleService), keyEquivalent: ""))
    menuItem.target = self
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54816255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档