gpt4 book ai didi

swift - 为什么我的应用程序只能看到位于 AppDelegate 中的菜单项选择器?

转载 作者:行者123 更新时间:2023-11-30 10:29:20 24 4
gpt4 key购买 nike

我正在用 Swift 构建我的第一个 macOS 应用程序。我已设法将菜单(NSMenu)添加到菜单栏额外图标,但是当菜单加载时,每个菜单项都显示为已停用。我知道这是当应用程序找不到菜单项的#selector 时的自动行为。

但问题是我确实为每个菜单项都有一个选择器。如果我将这些选择器的方法声明放在 AppDelegate 中,那么菜单可以很好地看到它们,并将菜单项显示为已激活。但是,如果我将其放在专用的 MenuManager 类中,那么它似乎根本看不到它们并将菜单项设置为停用。请注意,奇怪的是,编译器认为它们很好。如果没有,则会显示编译器错误。但在运行时,菜单似乎无法找到这些方法,除非它们位于 AppDelegate 中。

这是我声明菜单项的方式(在名为 BarIconMenu 的类中,该类是 NSMenu 的子类)

let short = NSMenuItem(
title: "Short (20 words)",
action: #selector(MenuManager.copyShortSnippetToClipboard),
keyEquivalent: ""
)

以下是该方法在 MenuManager 类中的定义方式

@objc func copyShortSnippetToClipboard() {
clipboardManager.copyText(withLength: .short)
ProgressHUD.showSuccessWithStatus("Copied to clipboard")
}

我已经尝试了我能想到的一切,包括1)清理构建,2)在MenuManager类前面附加@objc,3)初始化菜单在 MenuManager 而不是 AppDelegate 中 - 但没有任何效果。

我不希望我的所有代码都位于 AppDelegate 中,那么如何让我的菜单项选择器“查看”我需要它们调用的方法?

最佳答案

为了方便起见,init 方法设置了一些属性,但是 NSMenuItem类还有其他几个。操作选择器将设置要调用的方法,但目标是消息实际发送到的对象,因此您可以根据需要设置 menuItem 的目标(否则 AppDelegate 通常会成为默认目标)。

关于swift - 为什么我的应用程序只能看到位于 AppDelegate 中的菜单项选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59444517/

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