如何在 ios 13 中禁用 pdfkit pdfview 中的查找、共享、转发菜单项

Posted

技术标签:

【中文标题】如何在 ios 13 中禁用 pdfkit pdfview 中的查找、共享、转发菜单项【英文标题】:How to disable look up, share, forward menu items in pdfkits pdfview in ios13 【发布时间】:2019-11-05 13:05:11 【问题描述】:

自从 ios13 更新后,覆盖 PDFView 类的方法 canPerformAction(_ action: Selector, withSender sender: Any?) 不再检测或控制“查找”、“共享”和“转发”菜单项,我无法找到禁用它们的方法。 以前以这种方式覆盖它会阻止所有菜单项:

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool 
        return false

但是这只会阻止从 ios13 剪切、复制、粘贴。 有没有人弄清楚这一点?如果是这样,我将非常感谢您的帮助!

【问题讨论】:

为什么这被否决了?! 你找到解决办法了吗? 还没有。希望苹果能在未来的版本中解决这个问题 【参考方案1】:

我遇到了同样的问题。看起来在 iOS13 中,一些操作(菜单和触摸)被委托给 PDFView 的属性 documentView。因此,该视图类的方法调配对我有用,但它看起来像一个有效但“肮脏”的黑客。 在我的PDFView 子类中我添加了:

private func swizzleDocumentView() 
    guard let d = documentView, let documentViewClass = object_getClass(d) else  return 

    let sel = #selector(swizzled_canPerformAction(_:withSender:))
    let meth = class_getInstanceMethod(object_getClass(self), sel)!
    let imp = method_getImplementation(meth)

    let selOriginal = #selector(canPerformAction(_:withSender:))
    let methOriginal = class_getInstanceMethod(documentViewClass, selOriginal)!

    method_setImplementation(methOriginal, imp)


@objc func swizzled_canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool 
   return false

【讨论】:

感谢您的回答。我试过从 init 调用你的方法(使用 Swift 3),但它从来没有得到 documentView.. 你从哪里调用你的方法? 在阅读之后,我已经为 documentView 实现了你的方法,但是“查找”、“共享”菜单项仍在显示。所以,不幸的是,它不起作用。 (ios 13.4.1 模拟器,Swift 3.1) 哦,我忘了说,PDFView 实例的document 属性填充后documentView 属性不是nil。所以我在PDFView 子类和didSet 闭包调用swizzleDocumentView() 中覆盖了document 属性。您还需要一个标志来防止多次混合。 p.s.抱歉延迟回答 不幸的是它仍然不起作用。也许还需要别的东西? 这个解决方案对我很有效。看起来查找和共享是由文档视图处理的。当然这不是最好的解决方案,但我想我们需要遵循这种方式,直到苹果允许我们在 PDFView 子类中很好地处理这个问题。【参考方案2】:

找出您选择的元素属于哪个类(UITextField、UITextView、UIWebView 等),然后将其canPerformAction:withSender: 方法调配。

【讨论】:

感谢您花时间写一个答案。问题中提到了方法和类。上面的 canPerformAction() 覆盖在 ios 11 和 12 中适用于 pdfview,并且在 ios 13 中已停止正常工作

以上是关于如何在 ios 13 中禁用 pdfkit pdfview 中的查找、共享、转发菜单项的主要内容,如果未能解决你的问题,请参考以下文章

PDFKit 手势问题在升级到 IOS 13 后停止工作

使用 PDFKIt iOS 11 创建 PDF 注释

如何从使用 pdfkit 相机拍摄的图像创建 pdf

iOS PDFKit在PDFView中调整pdf框架

在 iOS 上使用 PDFKit.PDFView 打开 PDF

使用 Swift 5 - PDFKit 在 iOS 中编辑和保存现有的 pdf 文档