我正在用xCode编写一个Swift应用程序,并且没有问题创建一个新的菜单项并将其连接起来,以便发送的操作响应我的ViewController中的函数。 我遇到困难的地方是,如果我尝试覆盖现有的Apple预设菜单操作之一。例如,我想显示我自己的帮助,所以我想覆盖 showHelp: 函数,该函数当前是为帮助菜单设置的操作。
这就是我所做的。 请记住,我正在使用故事板,这适用于新菜单项。
- 已为主菜单.xib
- 添加了一个新的动作秀我的帮助:我把类型保留为 id
- 在我的视图控制器中创建一个名为showMyHelp()的新函数
- 从主菜单中选择 myApplicationName 帮助菜单项,然后从连接面板中选择,从"已发送操作"拖动到主菜单的第一个响应者,然后从选择列表中选择"showMyHelp"。 "已发送操作"现在读取"第一响应者/showMyHelp>操作:
但是,当我运行该应用程序时,帮助菜单现在已禁用,我无法访问它。
同样,如果我对我添加的自定义菜单项之一重复此方法,它可以正常工作。 菜单项未禁用,并执行操作。
好的。 我发现了我的问题所在。在上面的步骤 3 中,我需要包含发件人:AnyObject?作为调用函数时的参数,所以显示我的帮助(发件人:任何对象?
现在一切都很好。 下一步是弄清楚如何根据需要管理启用和禁用菜单项。
感谢您的帮助帖子。但是,我发现有一点可以使其工作:
- 函数签名应以
@IBAction
开头
@IBAction func showMyHelp(_ sender: AnyObject?)
- 此功能应在您的
AppDelegate
中定义。
对于下一步,请按照前面的步骤操作,它可以工作! :)
您也可以在 ViewController 上实现。
但是,首先,您指示接受第一响应者的标志。
import Cocoa
class ViewController: NSViewController {
// ..
override var acceptsFirstResponder: Bool {
return true
}
@IBAction func showHelp(_ sender: Any) {
print("showHelp")
}