带有故事板的菜单栏 - 未调用 validateMenuItem
Menubar with Storyboard - validateMenuItem not get called
我正在尝试使用情节提要设置菜单栏应用程序,但未调用我的 validateMenuItem
方法。
我会尽力解释我做了什么。
首先,我在我的应用程序场景中拖动了一个菜单项。然后一个 Object 用于我的 MenuController。创建了一个 MenuController (MenuController.swift) 并用代码填充了它。回到我的情节提要中,我将我的菜单委托设置为 MenuController,将 MenuController Outlet 设置为 Menu。 (我不确定我是否正确设置了代表。)
当我启动应用程序时,出现菜单图标并且第一项标题设置为测试。但是,当我单击该图标时,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
}
}
情节提要菜单代表
(来源:picr.de)
情节提要菜单控制器代表
(来源:picr.de)
有人有想法吗?
来自奥地利的问候!
menu/UI 验证机制不查询菜单的委托,而是使用项目的目标来确定启用状态。
如果未明确设置目标,它将遍历响应者链。
要获得基本验证,您必须确保设置了以下内容:
- "Auto Enables Items" 在 Interface Builder 中选中(默认打开)
- 您按住控制键将菜单的操作拖到第一响应者
- 菜单的操作在 class 中实现,它是响应链的一部分(例如,为您的 UI 管理一组操作的视图控制器)
validateUserInterfaceItem:
的基本实现可能如下所示,其中包含一个名为 test 的操作选择器:
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool
{
if anItem.action() == Selector("test:") {
print("validating item \(anItem)")
return true
}
return true
}
我正在尝试使用情节提要设置菜单栏应用程序,但未调用我的 validateMenuItem
方法。
我会尽力解释我做了什么。 首先,我在我的应用程序场景中拖动了一个菜单项。然后一个 Object 用于我的 MenuController。创建了一个 MenuController (MenuController.swift) 并用代码填充了它。回到我的情节提要中,我将我的菜单委托设置为 MenuController,将 MenuController Outlet 设置为 Menu。 (我不确定我是否正确设置了代表。)
当我启动应用程序时,出现菜单图标并且第一项标题设置为测试。但是,当我单击该图标时,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
}
}
情节提要菜单代表
(来源:picr.de)
情节提要菜单控制器代表
(来源:picr.de)
有人有想法吗?
来自奥地利的问候!
menu/UI 验证机制不查询菜单的委托,而是使用项目的目标来确定启用状态。
如果未明确设置目标,它将遍历响应者链。
要获得基本验证,您必须确保设置了以下内容:
- "Auto Enables Items" 在 Interface Builder 中选中(默认打开)
- 您按住控制键将菜单的操作拖到第一响应者
- 菜单的操作在 class 中实现,它是响应链的一部分(例如,为您的 UI 管理一组操作的视图控制器)
validateUserInterfaceItem:
的基本实现可能如下所示,其中包含一个名为 test 的操作选择器:
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool
{
if anItem.action() == Selector("test:") {
print("validating item \(anItem)")
return true
}
return true
}