macOS菜单栏App中禁用的菜单项

是的

我正在尝试在macOS上构建菜单栏应用程序。

我似乎无法弄清楚为什么禁用了某些菜单项...屏幕截图:

该应用程序的屏幕截图

如您所见,“退出”菜单项已启用,单击后退出应用程序。但是,“首选项”项被禁用。

我的密码

AppDelegate.swift:

let menuBarItem = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength)

func applicationDidFinishLaunching(_ aNotification: Notification) {
    menuBarItem.button?.image = NSImage(named: "MenuBarIcon")
    menuBarItem.menu = MenuBarMenu()
}

MenuBarMenu.swift:

class MenuBarMenu: NSMenu {
    init() {
        super.init(title: "Menu")
        self.addItem(withTitle: "Preferences...", action: #selector(MenuBarActions.openPreferencesWindow(_:)), keyEquivalent: "")
        self.addItem(NSMenuItem.separator())
        self.addItem(withTitle: "Quit", action: #selector(MenuBarActions.terminate(_:)), keyEquivalent: "")
    }

    required init(coder decoder: NSCoder) {
        fatalError("init(coder:) has not been impemented")
    }
}

class MenuBarActions {
    @objc static func terminate(_ sender: NSMenuItem) {
        NSApp.terminate(sender)
    }

    @objc static func openPreferencesWindow(_ sender: NSMenuItem) {
        print("preferences")
    }
}

我使用完全相同的方法来创建MenuBarItems和用于选择器的相同结构,因此这种不一致让我有些困惑。发生这种情况的原因是什么?如何解决此问题?

肯·托马斯(Ken Thomases)

您的退出菜单项正在“意外”工作。它没有使用terminate(_:)您实现方法。在这里放一个print()语句,您会看到它没有被调用。

菜单项要么分配了特定的目标对象,要么使用响应者链搜索适当的目标。您没有为菜单项分配目标,因此它们正在使用响应者链。您的MenuBarActions 课程不属于响应者链。(类通常不能。某些对象可以。)因此,菜单项永远不会以您的类为目标。

退出菜单之所以起作用,是因为应用程序对象位于响应者链上,并且具有terminate(_:)方法。实际上,这就是您的terminate(_:)方法曾经被调用过的情况。但是菜单项实际上是直接调用它。

您应该创建一个实际的控制器对象(不仅仅是类)来实现操作方法,并target为其设置菜单项的属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

菜单栏中未显示的菜单项

我可以禁用菜单栏上的菜单项和/或动态显示它吗?

如何在AppleScript中向菜单栏应用(不包含菜单栏菜单项)发送命令?

在Qt应用程序菜单栏的主菜单中添加和本地化菜单项

如何将下拉菜单项添加到我的水平菜单栏中?

如何使用Pyinstaller打包的Kivy Python应用程序在OSX菜单栏中创建菜单项?

PrimeFaces 菜单栏,浮动上的最后一个菜单项:右

如何在 Flutter 中以编程方式显示/隐藏 Nav Drawer 中的菜单项并启用/禁用 App Bar 中的溢出菜单项?

Laravel背包中的下拉式侧边栏菜单项

android-菜单项未显示在操作栏中

导航到ShinyDashboard中的特定侧边栏菜单项?

导航栏响应中的中心菜单项

折叠的导航栏中的子菜单项

如何更改顶部栏中不同片段的菜单项?

在Android ICS操作栏中显示菜单项

无法在导航栏中水平对齐菜单项

在R Shiny中更改侧边栏菜单项的颜色

如何在操作栏中隐藏菜单项?

Android,工具栏布局中的位置菜单项

为什么不在操作栏中显示菜单项?

工具栏菜单项在片段中单击

如何在Android操作栏中隐藏菜单项?

如何禁用操作栏上的选项菜单(而不是菜单项)

macOS / Qt:禁用应用程序停靠菜单上的“退出”菜单项

在OS X上使用屏幕菜单栏时如何使菜单项加速键起作用

我们如何在单击菜单栏项时突出显示活动菜单项?

动作栏-拖动菜单项

动作栏菜单项文本颜色

Android操作栏菜单项