使用Quicklook Framework拦截PDF链接点击(QLPreviewController)

时间:2012-04-23 20:49:34

标签: ios xcode quicklook qlpreviewcontroller

Quicklook中是否提供PDF链接处理?

我创建了一个原型,并且QLPreviewControllerDelegate方法 - (BOOL)previewController:(QLPreviewController *)控制器shouldOpenURL:(NSURL *)url forPreviewItem:(id)item永远不会被调用。

当我使用带有链接的.docx文件时,委托方法会被触发。

此外,当我使用safari或UIWebView打开PDF时,链接处理工作正常。

我测试了几个不同的PDF,链接拦截从未奏效。

我确保My接口实现以下协议: QLPreviewControllerDataSource,QLPreviewControllerDelegate

我还确保将具有shouldOpenUrl方法的类指定为我的QlPreviewController实例的委托。

我猜测问题不在于我的代码,因为.docx链接拦截工作正常。

对我可能做错了什么的想法?

Quicklook是否支持PDF链接拦截?

我还注意到,当我在iOS邮件中打开PDF时,它使用Quicklook,PDf链接也不能在那里工作。

2 个答案:

答案 0 :(得分:2)

为那些在这里寻找相同答案的人回答我自己的问题。 Quicklook不支持链接处理。如果需要处理PDF文档中的链接,则必须使用CATiledLayer来呈现PDF。

答案 1 :(得分:0)

您可以通过QLPreviewControllerDelegate

检测文档中的链接何时被点击
/*
 * @abstract Invoked by the preview controller before trying to open an URL tapped in the preview.
 * @result Returns NO to prevent the preview controller from calling -[UIApplication openURL:] on url.
 * @discussion If not implemented, defaults is YES.
 */
- (BOOL)previewController:(QLPreviewController *)controller shouldOpenURL:(NSURL *)url forPreviewItem:(id <QLPreviewItem>)item;

返回YES会打开该文档,如果是外部网址,则会自动启动Safari。

注意,您可能希望显示UIAlertView以询问用户是否要退出应用以打开Safari。