1

在我的应用程序中,我使用 UIWebView 来显示不同类型的文件,例如 html、pdf、doc 等。

我正在通过禁用标注和使用手势识别器来自定义 html 内容的上下文菜单。它适用于 html 内容。

然而,当显示 pdf 内容时,web 视图使用与私有框架 corepdf 框架不同的类。因此,适用于 html 内容的技术都不适用于 pdf 内容。

UIWebView 使用 UIPDFPageView 和相关类在长按超链接时显示上下文菜单。

有什么方法可以覆盖上下文菜单的显示而无需处理私有框架?

4

1 回答 1

1

通过巧妙的技巧,您可以覆盖底层UIWebDocumentView-canPerformAction:withSender:方法以仅传递您希望显示的内容。这也适用于 PDF,因为内部类在视图层次结构中更深,您应该可以使用 UIWebDocumentView。

在 iOS5、6 和 7 种子 1 上,UIWebDocumentView对象是UIWebView. 我所做的是找到在其类名中具有前缀的滚动视图的子视图@"UIWeb",并使用 Objective C 运行时将其动态子类化为我自己的子类(我在运行时创建它 - 就像系统对键值所做的那样观察)并用我自己的替换实现。您甚至可以通过调用super.

这是hacky,但它似乎是安全的。Apple 似乎没有引入进程外的 UIWebView(使用 XPC),所以它在 iOS7 上也应该是安全的。

一如既往的免责声明,this API is not documented and is subject to change at any given moment, and your app may stop functioning at any time®.

于 2013-06-19T03:54:13.857 回答