在我的应用程序中,我使用UIWebView显示不同类型的文件,如html,pdf,doc等。
我正在通过禁用标注和使用手势识别器来自定义html内容的上下文菜单。它适用于HTML内容。
然而,当显示pdf内容时,Web视图使用来自corepdf框架的不同类,这是私有框架。因此,处理html内容的技术都不适用于pdf内容。
UIWebView使用UIPDFPageView及相关类在长按超链接时显示上下文菜单。
是否有任何方法可以覆盖上下文菜单的显示而无需处理私有框架?
答案 0 :(得分:1)
通过巧妙的技巧,您可以覆盖基础UIWebDocumentView
的{{1}}方法,只传递您想要显示的内容。这也适用于PDF,因为内部类在视图层次结构中更深,你应该可以使用UIWebDocumentView。
在iOS5,6和7种子1上,-canPerformAction:withSender:
对象是UIWebDocumentView
滚动视图的子视图。我所做的是找到滚动视图的子视图,其类名中包含UIWebView
前缀,并使用Objective C运行时将其动态子类化到我自己的子类(我在运行时创建它 - 就像系统一样用于键值观察)并用我自己的实现替换实现。您甚至可以通过调用@"UIWeb"
来调用上一个实现。
这很黑,但似乎很安全。 Apple似乎没有引入过程外的UIWebView(使用XPC),所以iOS7也应该是安全的。
与免责声明一样,super
。