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

Posted

技术标签:

【中文标题】我的连接到我的视图控制器 IBAction 的菜单是灰色的【英文标题】:My menu connected to my view controller IBAction is greyed 【发布时间】:2016-07-16 16:25:23 【问题描述】:

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

我的 VideoViewController 实现了以下动作:

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

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

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

有什么想法吗?

【问题讨论】:

您是否也将 OpenVideo 连接到您的 ViewController(例如,新的引用插座 > ViewController)? 我该怎么做? 您应该能够控制并单击“打开视频”菜单项并将连接器拖动到您的 VideoViewController。当你这样做时,你应该看到 openVideo IBAction 来连接它。 另外,如果您没有 IBOutlet 设置,您可能需要一个:(例如。@IBOutlet var openVideoMenuItem: NSMenuItem!)。那是 IBAction 和 NSMenuItem 之间的桥梁。 【参考方案1】:

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

class AppDelegate: NSObject, NSApplicationDelegate 

    @IBOutlet var myMenuItem: NSMenuItem!

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

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

【讨论】:

正如我所提到的,我使用的是 Storyboard 而不是 XIB 文件 @MartinDelille:无论项目使用xibsnibs 和/或storyboards,都是相同的过程。如前所述(两次),您的代码需要一个IBOutlet,您显然没有包含它。 IBAction 函数不会自动连接到您的 NSMenuItem - 我的答案中的图像应该说明如何做到这一点。你能试试我的建议吗? 其他问题:您使用什么工具来生成这个非常清晰的 GIF 动画? :-) @MartinDelille:我使用 screenflow 创建了无损截屏,然后使用 gifbrewery 导入视频并生成动画 gif。这听起来可能很复杂,但实际上花了两分钟。 看看一个示例项目可能会有所帮助吗?奇怪的是,您的 NSMenuItem 首先是灰色的(也许它没有被选为“启用”?)。当我添加一个新的时,即使它没有连接到任何东西,它也不会默认显示为灰色。作为测试,您可以尝试创建一个新项目,在 AppDelegate.swift 中放置 IBActionIBOutlet,看看是否可以连接 NSMenuItem【参考方案2】:

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

这对我有用:

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

就是这样。点击跑步并呼气。

【讨论】:

【参考方案3】:

这里的问题是您缺少参数的下划线。如果您添加它,它将与 First Responder 一起使用。此外,对于 Swift 3 及更高版本,发送者类型应为 Any,或特定的控件类型,例如 NSMenuItem,尽管它仍可与 AnyObject 一起使用。

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

【讨论】:

以上是关于我的连接到我的视图控制器 IBAction 的菜单是灰色的的主要内容,如果未能解决你的问题,请参考以下文章

来自 Xib 文件的 IBAction 以分离视图控制器

在 Mac Catalyst 项目中未调用 IBAction

条形按钮项目能否同时连接到 IBAction 和 StoryBoard 到模态视图控制器?

如何在不使用助手编辑器的情况下将 IBOutlet 和 IBAction 连接到视图控制器

UIButton 子类@IBAction 不起作用

将 IBAction 连接到自定义类