我的连接到我的视图控制器 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:无论项目使用xibs
、nibs
和/或storyboards
,都是相同的过程。如前所述(两次),您的代码需要一个IBOutlet
,您显然没有包含它。 IBAction
函数不会自动连接到您的 NSMenuItem
- 我的答案中的图像应该说明如何做到这一点。你能试试我的建议吗?
其他问题:您使用什么工具来生成这个非常清晰的 GIF 动画? :-)
@MartinDelille:我使用 screenflow 创建了无损截屏,然后使用 gifbrewery 导入视频并生成动画 gif。这听起来可能很复杂,但实际上花了两分钟。
看看一个示例项目可能会有所帮助吗?奇怪的是,您的 NSMenuItem
首先是灰色的(也许它没有被选为“启用”?)。当我添加一个新的时,即使它没有连接到任何东西,它也不会默认显示为灰色。作为测试,您可以尝试创建一个新项目,在 AppDelegate.swift 中放置 IBAction
和 IBOutlet
,看看是否可以连接 NSMenuItem
。【参考方案2】:
我知道 OP 找到了解决方案,即使我下载了他的项目,我也无法启用(取消灰显)我的菜单项。
这对我有用:
在目标ViewController
中创建一个@IBAction
在目标ViewController
中覆盖func validateMenuItem(_ menuItem: NSMenuItem) -> Bool
(当它验证menuItem
确实是您愿意连接到@IBAction
的menuItem
时,它必须返回true
)
将MenuItem
连接到First Responder
,然后连接到您之前创建的@IBAction
就是这样。点击跑步并呼气。
【讨论】:
【参考方案3】:这里的问题是您缺少参数的下划线。如果您添加它,它将与 First Responder 一起使用。此外,对于 Swift 3 及更高版本,发送者类型应为 Any
,或特定的控件类型,例如 NSMenuItem
,尽管它仍可与 AnyObject
一起使用。
@IBAction func openVideo(_ sender: Any)
...
【讨论】:
以上是关于我的连接到我的视图控制器 IBAction 的菜单是灰色的的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac Catalyst 项目中未调用 IBAction
条形按钮项目能否同时连接到 IBAction 和 StoryBoard 到模态视图控制器?