objective-c - 禁用 NSDocument 的 "Revert To"和 "Duplicate"菜单项

标签 objective-c swift macos nsdocument nsmenu

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

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

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

覆盖 func duplicate() throws -> NSDocument { 回归 self

最佳答案

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

在这种情况下,将以下代码放入您的 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 的人机界面指南,您不应保留未使用的菜单项。因此,如果您的应用根本不支持复制和还原功能,我宁愿删除项目而不是禁用。

关于objective-c - 禁用 NSDocument 的 "Revert To"和 "Duplicate"菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855796/

相关文章:

objective-c - 在 MacOS 10.10 上监视文件系统事件

ios - 自定义 UICollectionView 数据源和委托(delegate)

ios - UIScrollView scrollRectToVisible :animated: not taking rect into account on iOS7

ios - Xcode 8 - 自动布局问题

ios - Swift - 导入 Objective-C 给出 "Unknown type name"

ios - 如何访问 "func applicationWillResignActive"内的 UIViewController 变量? swift ,iOS Xcode

swift - ARSCNView 嵌入导航 Controller 时不显示对象

xcode - 如果不是这个 CFString 废话,我可以让 GCC 4.6.2 在 Xcode 4.2 中工作

.net - 从 SSL 证书中提取序列号

objective-c - 使用 Cocoapods 安装 firebase