禁用NSDocument的“恢复到”& “复制”菜单项

时间:2017-12-17 13:50:09

标签: objective-c swift macos nsdocument nsmenu

我正在创建一个Mac应用程序来读取XML文档并保存它。一切都工作正常,除了“恢复到”& “复制”菜单项。直到我找到一个解决方案,我想要禁用它们,但我没有找到任何解决方案,请让我知道如何禁用这两个选项,以便他们最终用户无法点击它们。

我已经从.xib查看过菜单,以便我可以禁用它们,但我没有看到任何选项。

我试图以某种方式操纵下面的代码,但我没有找到任何答案。

覆盖func duplicate()throws - > NSDocument {     回归自我 }

1 个答案:

答案 0 :(得分:2)

在Cocoa中禁用菜单项的一般方法是在false(或validateMenuItem(_:))中返回validateUserInterfaceItem(_:)

在这种情况下,请将以下代码放在NSDocument子类中。

override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {

    guard let action = menuItem.action else { return false }

    switch action {
    case #selector(duplicate(_:)):
        return false
    case #selector(revertToSaved(_:)):
        return false
    default: break
    }

    return super.validateMenuItem(menuItem)
}

但是,根据Apple的人机界面指南,您不应该留下未使用的菜单项。因此,如果您的应用根本不支持复制和还原功能,我更愿意删除项目而不是禁用。