我正在使用UIDocumentInteractionController
的实例为用户提供打开给定文档的选项,如果他们的设备上安装了功能强大的应用程序。
Apple's documentation for the QuickLook Framework提到:
要显示快速查看预览控制器,您可以使用其中任何一种 选项:
- 使用UINavigationController对象将其推入视图。
- 使用presentModalViewController:animated以模态,全屏显示:animated: 其父类的方法,UIViewController。
- 提交文件 交互控制器(如预览和打开文件中所述)。 然后,用户可以通过选择调用Quick Look预览控制器 从文档交互控制器的选项菜单中快速查看。
(强调我的)
我选择了第三个选项:我提出QLPreviewController
而不是使用UIDocumentInteractionController
;这是我的代码:
@IBAction func openDocument(sender: AnyObject) {
let interactionController = UIDocumentInteractionController(URL: documentURL)
interactionController.delegate = self
// First, attempt to show the "Open with... (app)" menu. Will fail and
// do nothing if no app is present that can open the specified document
// type.
let result = interactionController.presentOpenInMenuFromRect(
self.view.frame,
inView: self.view,
animated: true
)
if result == false {
// Fall back to options view:
interactionController.presentOptionsMenuFromRect(
self.view.frame,
inView: self.view,
animated: true)
}
}
执行回退路径(选项菜单),因为我没有任何可以打开docx的应用程序。 但是,提到的“快速查看”选项不存在:
我缺少什么?
注意:我没有实施UIDocumentInteractionControllerDelegate
的任何方法。
答案 0 :(得分:1)
愚蠢的我...... 再次。
答案:事实证明,要使QuickLook选项存在,您需要实现委托协议的此方法:
func documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) -> UIViewController {
return self // returning self seems to work
}
(我在某种程度上错过了这个。在第一次阅读时,我认为实现这种方法意味着我应该返回一个能够显示内容的视图控制器 - 在这种情况下是一个完整的docx渲染器。它只是要求显示预览的“来源”
实施该方法后,眼睛按钮开始出现在选项菜单中。
但是在点击它时,我的应用程序会崩溃:当快速启动时,UIDocumentInteractionController
被取消分配。我将它从局部变量更改为属性,现在它可以工作。