gpt4 book ai didi

swift - 带有 Storyboard的菜单栏 - 未调用 validateMenuItem

转载 作者:搜寻专家 更新时间:2023-11-01 06:21:20 24 4
gpt4 key购买 nike

我正在尝试使用 Storyboard 设置菜单栏应用程序,但未调用我的 validateMenuItem 方法。

我会尽力解释我做了什么。首先,我在我的应用程序场景中拖动了一个菜单项。然后是我的 MenuController 的一个对象。创建一个 MenuController (MenuController.swift) 并用代码填充它。回到我的 Storyboard 中,我将我的菜单委托(delegate)设置为 MenuController,将 MenuController Outlet 设置为 Menu。 (我不确定我是否正确设置了委托(delegate)。)

当我启动应用程序时,菜单图标出现并且第一个项目标题设置为测试。但是,当我单击图标时,validateMenuItem 方法不会被调用。

MenuController.swift

import Cocoa
class MenuController: NSObject {

var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)

@IBOutlet weak var statusMenu: NSMenu!
@IBOutlet weak var item1: NSMenuItem!

override func awakeFromNib() {
print("awakeFromNib")

self.item1.title = "Test"

let icon = NSImage(named: "menubarIcon")
statusItem.image = icon
statusItem.menu = statusMenu
}

override func validateMenuItem(menuItem: NSMenuItem) -> Bool {
print("validateMenuItem")
return true
}
}

Storyboard菜单委托(delegate) Storyboard Menu Delegates
(来源:picr.de)

Storyboard MenuController Delegates Storyboard MenuController Delegates
(来源:picr.de)

有人有想法吗?

来自奥地利的问候!

最佳答案

菜单/UI 验证机制不查询菜单的委托(delegate),而是使用项目的目标来确定启用状态。
如果未明确设置目标,它将遍历响应链。

要获得基本验证,您必须确保设置了以下内容:

  • 在 Interface Builder 中选中“Auto Enables Items”(默认开启)
  • 您控制并拖动菜单的操作到第一响应者
  • 菜单的操作在作为响应链一部分的类中实现(例如,管理 UI 的一组操作的 View Controller )

validateUserInterfaceItem: 的基本实现对于带有名为 test 的操作选择器的项目可能如下所示:

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool
{
if anItem.action() == Selector("test:") {
print("validating item \(anItem)")
return true
}
return true
}

关于swift - 带有 Storyboard的菜单栏 - 未调用 validateMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594837/

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