gpt4 book ai didi

swift - 没有为每个菜单项调用 validateMenuItem

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

我的主菜单有几个菜单项(文件、编辑、 View 、窗口等等)。所有菜单项都将其操作设置为 FirstResponder 中的操作。

应用程序有一个窗口,该窗口的类型为 MyWindow,它继承自 NSWindow(见下文)。

请注意,NSWindow 实现了 NSMenuValidation,因此当 MyWindow 声明符合 NSMenuValidation 时,它会被标记为错误>.

我重写了函数 validateMenuItem 如下:

class MyWindow: NSWindow, NSMenuDelegate {

...

override func validateMenuItem(_ item: NSMenuItem) -> Bool {
Log.atDebug?.log("\(item.title)")
....
}
}

当我运行应用程序时,为 FileWindow 菜单项调用了 validateMenuItem 函数,但没有为 Edit 调用View 项。

注意:Log 是一个日志框架(SwifterLog)的实例。

正确调用了所有菜单项的操作。 (也适用于未调用 validateMenuItem 的菜单项)

解决这个问题对我来说并不难(函数 menuNeedsUpdate 为所有菜单调用并且可以用于此),但我想知道为什么会出现这种行为。

最佳答案

答案可以在这里找到: validateMenuItem or menuWillOpen not called for NSMenu

validateMenuItem: belongs to the NSMenuValidation informal protocol; for it to be called the relevant menu items must have a target.

关于swift - 没有为每个菜单项调用 validateMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56849263/

25 4 0