我创建了一个名为PreviewFile
的自定义类:
class PreviewFile: UIViewController , UIDocumentInteractionControllerDelegate {
var documentInteractionController = UIDocumentInteractionController()
func previewFile(name:String) {
let documentsURL = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!,isDirectory: true )
let urlToMyPath = documentsURL.appendingPathComponent(name)!
documentInteractionController = UIDocumentInteractionController(url: urlToMyPath)
documentInteractionController.delegate = self
documentInteractionController.presentPreview(animated: true)
}
public func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
return self
}
}
然后我在ViewController上调用
previewFile
方法:var preview = PreviewFile()
preview.previewFile(name:"guide.pdf")
但是编译器给我这个错误:
警告:尝试呈现
其视图不在窗口中
等级!
最佳答案
class PreviewFile: UIViewController , UIDocumentInteractionControllerDelegate {
private var controller: UIViewController!
func previewFile(name:String, in controller: UIViewController) {
self.controller = controller
let documentsURL = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!,isDirectory: true )
let urlToMyPath = documentsURL.appendingPathComponent(name)!
let documentInteractionController = UIDocumentInteractionController(url: urlToMyPath)
documentInteractionController.delegate = self
documentInteractionController.presentPreview(animated: true)
}
public func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
return self.controller
}
}
那么您就可以像这样从UIViewController调用它:
var preview = PreviewFile()
preview.previewFile(name:"guide.pdf", in self)
您有此问题,因为您试图从PreviewFile控制器显示documentDirectory,而屏幕上未显示
更新#1
更好的解决方案
class PreviewFile: NSObject, UIDocumentInteractionControllerDelegate {
private var controller: UIViewController!
init(controller: UIViewController) {
super.init()
self.controller = controller
}
func previewFile(name:String) {
let documentsURL = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!,isDirectory: true )
let urlToMyPath = documentsURL.appendingPathComponent(name)!
let documentInteractionController = UIDocumentInteractionController(url: urlToMyPath)
documentInteractionController.delegate = self
documentInteractionController.presentPreview(animated: true)
}
public func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
return self.controller
}
}
这样称呼它:
var preview = PreviewFile(controller: self)
preview.previewFile(name:"guide.pdf")
关于ios - 在自定义类中呈现UIDocumentInteractionController的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44133995/