Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 连接到我的视图控制器iAction的菜单呈灰色_Macos_Interface Builder_Menuitem_Ibaction_Xcode Storyboard - Fatal编程技术网

Macos 连接到我的视图控制器iAction的菜单呈灰色

Macos 连接到我的视图控制器iAction的菜单呈灰色,macos,interface-builder,menuitem,ibaction,xcode-storyboard,Macos,Interface Builder,Menuitem,Ibaction,Xcode Storyboard,我正在使用Xcode Interface Builder情节提要构建一个应用程序 我的VideoViewController执行以下操作: @IBAction func openVideo(sender: AnyObject) { ... } 将菜单项连接到第一响应者时,我可以看到我的操作: 不幸的是,当我启动应用程序时,菜单项呈灰色: 有什么想法吗?您应该能够控制并单击NSMenuItem,然后将其连接到您的VideoViewController。通常会使用IBOutlet来连接

我正在使用Xcode Interface Builder情节提要构建一个应用程序

我的VideoViewController执行以下操作:

@IBAction func openVideo(sender: AnyObject) {
    ...
}
将菜单项连接到第一响应者时,我可以看到我的操作:

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


有什么想法吗?

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

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var myMenuItem: NSMenuItem!

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


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

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

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet var myMenuItem: NSMenuItem!

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


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

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

以下是对我有效的方法:

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

就这样。点击run and呼气。

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

以下是对我有效的方法:

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

就这样。点击run并呼气。

这里的问题是参数缺少下划线。如果你补充说,它将与第一反应。此外,对于Swift 3及以后的版本,发送方类型应为
Any
,或特定的控制类型,如
NSMenuItem
,尽管它仍适用于
AnyObject

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

这里的问题是参数缺少下划线。如果你补充说,它将与第一反应。此外,对于Swift 3及以后的版本,发送方类型应为
Any
,或特定的控制类型,如
NSMenuItem
,尽管它仍适用于
AnyObject

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


您是否已将OpenVideo连接到您的ViewController(例如,新建引用插座>ViewController)?如何操作?您应该能够控制单击“打开视频”菜单项并将连接器拖动到您的VideoViewController。当您这样做时,您应该看到openVideo iAction以将其连接到。此外,如果您没有IBOutlet设置,您可能需要一个:(例如
@IBOutlet var openVideoMenuItem:NSMenuItem!
)。这是iAction和NSMenuItem之间的桥梁。您是否也将OpenVideo连接到您的ViewController(例如,新建引用插座>ViewController)?我如何才能做到这一点?您应该能够控制单击“打开视频”菜单项并将连接器拖动到您的VideoViewController。当您这样做时,您应该看到openVideo iAction以将其连接到。此外,如果您没有IBOutlet设置,您可能需要一个:(例如
@IBOutlet var openVideoMenuItem:NSMenuItem!
)。这是iAction和NSMenuItem之间的桥梁。正如我提到的,我使用的是故事板而不是XIBfile@MartinDelille:无论项目是否使用
xibs
nibs
、和/或
故事板,都是相同的过程。如前所述(两次),您的代码需要一个
IBOutlet
,而您显然没有包括它。
iAction
函数不会自动连接到您的
NSMenuItem
——我的答案中的图像应该说明如何进行连接。你能试试我的建议吗?另一个问题:你用什么工具生成了这个非常清晰的GIF动画?:-)@Martindelle:我使用screenflow创建了一个无损的屏幕播放,然后使用gifbrewery导入视频并生成动画gif。这听起来可能很复杂,但实际上需要两分钟。看看一个示例项目可能会有帮助吗?奇怪的是,您首先有一个灰显的
NSMenuItem
(可能它没有被选为“已启用”?)。当我添加一个新的时,默认情况下它不会变灰,即使它没有连接到任何东西。作为测试,您可以尝试创建一个新项目,在AppDelegate.swift中放置
iAction
iOutlet
,看看是否可以连接
NSMenuItem
。正如我提到的,我使用的是故事板而不是XIBfile@MartinDelille:无论项目是否使用
xibs
,都是相同的过程,
NIB
,和/或
情节提要
。如前所述(两次),您的代码需要一个
IBOutlet
,而您显然没有包括它。
iAction
函数不会自动连接到您的
NSMenuItem
——我的答案中的图像应该说明如何进行连接。你能试试我的建议吗?另一个问题:你用什么工具生成了这个非常清晰的GIF动画?:-)@马丁德里尔: