swift - 如何自定义 PDFView 的上下文菜单?

标签 swift cocoa pdfview

我在我的应用程序中使用 PDFView 实例。我想将自己的项目添加到上下文菜单,并删除一些不适合我的应用程序的默认项目。

一些默认项目是合适的,所以理想情况下我会调整现有菜单而不是构建一个新菜单。

当我创建 pdf View 时,不存在有效的 pdfView.menu 项,因此我无法设置自己的委托(delegate)。

我曾尝试使用从 PDFView 继承的类(声明为 NSMenuDelegate)并覆盖 menuWillOpen 和 menuNeedsUpdate - 但我的代码从未被调用。

我可以看到 PDFView 正在混合文本字段和 pdf 相关菜单项,具体取决于文本选择,在呈现的上下文菜单中,因此显然那里没有固定菜单。

无论如何我可以拦截这个还是我只需要在上面强制我自己的菜单?

在 MacOS 10.13 上。

最佳答案

子类 PDFView 并覆盖 func menu(for event: NSEvent) -> NSMenu?。调用 super 并调整菜单。

采用协议(protocol) NSMenuItemValidation 并实现 func validateMenuItem(_ menuItem: NSMenuItem) -> Bool 来启用和禁用项目。

关于swift - 如何自定义 PDFView 的上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594580/

相关文章:

Swift 3 如何显示基于 MFMailComposeResult 电子邮件屏幕的确认屏幕

ios - 当应用程序在后台使用 Swift 3 时如何在 iOS 10 中播放声音

macos - 阻止 OpenGL.framework 在 Cocoa 应用程序中加载

ios - 在 Swift 中以编程方式将 UIImageView 替换为 PDFView

swift - Q : How to change language PDF page indicator?

ios - Swift 函数中的动态修饰符

ios - 从 Swift 中的 AVCaptureSession 获取输出以发送到服务器

cocoa - 核心数据迁移错误消息 "' 模型不包含配置 'XYZ' .'"

iphone - 释放您失去踪迹的对象的最佳方法

cocoa - 未在 PDFView 子类上调用 drawRect