连接到我的视图控制器IBAction的我的菜单是灰色的

时间:2016-07-16 16:25:24

标签: macos interface-builder menuitem ibaction xcode-storyboard

我正在使用 Xcode Interface Builder 故事板构建应用程序。

我的 VideoViewController 实现以下操作:

@IBAction func openVideo(sender: AnyObject) {
    ...
}

将我的菜单项连接到第一响应者时,我可以看到我的行动:

connection

不幸的是,当我启动我的应用程序时,菜单项是灰色的:

enter image description here

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您应该可以控制点击NSMenuItem并将其连接到您的VideoViewController。通常会使用IBOutlet来连接您的IBAction

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var myMenuItem: NSMenuItem!

    @IBAction func openItem(sender: AnyObject) {
        print("success!")
    }
}

enter image description here

在您的特定情况下,您可以通过控制单击并将连接器拖到VideoViewController。

答案 1 :(得分:1)

我知道OP找到了解决方案,即使我下载了他的项目,我也无法启用(取消灰显)我的菜单项。

这对我有用:

  • 在目标@IBAction
  • 中创建ViewController
  • 覆盖目标func validateMenuItem(_ menuItem: NSMenuItem) -> Bool中的ViewController(当它验证true确实是您愿意连接到的menuItem时,它必须返回menuItem @IBAction
  • MenuItem连接到First Responder,然后连接到之前创建的@IBAction

那就是它。点击跑步和呼气。

答案 2 :(得分:0)

这里的问题是你缺少参数的下划线。如果你添加它,它将适用于First Responder。此外,对于Swift 3以上版本,发件人类型应为Any,或特定控件类型,例如NSMenuItem,但它仍然适用于AnyObject

@IBAction func openVideo(_ sender: Any) {
    ...
}