Comment ouvrir et afficher l'URL du fichier de documents obtenu à partir du service Web à l'aide de QLPreviewController.Ouvrir et afficher le fichier de document Url
Répondre
Vous ne pouvez pas faire cela. La documentation peut bien expliquer à ce sujet, mais, vous voudriez essayer de faire votre propre visionneuse. Bonne chance!
Voir:
Vous pouvez faire comme le spectacle du site: "Création et configuration d'un contrôleur d'interaction document"
- (UIDocumentInteractionController *) setupControllerWithURL: (NSURL) fileURL
usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {
UIDocumentInteractionController *interactionController =
[UIDocumentInteractionController interactionControllerWithURL: fileURL];
interactionController.delegate = interactionDelegate;
return interactionController;}
« Une fois que vous avez un contrôleur d'interaction de documents, vous pouvez utilise ses propriétés pour obtenir des informations sur le fichier associé, y compris son nom, son type et son URL. "
- Afficher une sorte de spinner de progression.
- Téléchargez le fichier dans votre dossier
~/documents
en utilisantURLSession
etURLSessionDownloadTask
. - Cacher le curseur de progression.
- Ensuite, vous devez créer une instance d'une classe qui implémente
QLPreviewControllerDataSource
et contient votre document. Cacher les progrès spinner et présente
QLPreviewController
import UIKit import QuickLook class Document: NSObject, QLPreviewItem { var previewItemURL: URL? } class PreviewDataSource: NSObject, QLPreviewControllerDataSource { var document: Document? func numberOfPreviewItems(in controller: QLPreviewController) -> Int { return document != nil ? 1 : 0 } func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { return document! } } class ProgressLoadingViewController: UIViewController { var session: URLSession = URLSession(configuration: URLSessionConfiguration.default) var downloadTask: URLSessionDownloadTask? var dataSource: PreviewDataSource? override func viewDidLoad() { super.viewDidLoad() startDownload() } func startDownload() { // start progres spinner downloadTask = session.downloadTask(with: URL(string: "http://che.org.il/wp-content/uploads/2016/12/pdf-sample.pdf")!) { [weak self] (downloadLocation, response, error) in guard // check if download went correctly error != nil, let filename = response?.suggestedFilename, let downloadLocation = downloadLocation else { print("Something went wrong: \(error!)") return } // copy file let fileManager = FileManager.default let targetPath = URL(fileURLWithPath: filename, relativeTo: fileManager.temporaryDirectory) do { try fileManager.copyItem(at: downloadLocation, to: targetPath) } catch let fileError { print("Copying failed: \(fileError)") return } // prepare preview let document = Document() document.previewItemURL = targetPath self?.dataSource? = PreviewDataSource() self?.dataSource?.document = document let qlViewController = QLPreviewController() qlViewController.dataSource = self?.dataSource // hide progress spinner self?.present(qlViewController, animated: true) { self?.downloadTask = nil qlViewController.reloadData() } } downloadTask?.resume() } }
Bien sûr cette longue fonction d'achèvement devrait être divisé en plusieurs, puis transféré à sa propre classe DocumentDownloadManager
.
pouvez-vous me répondre pour l'objectif C ?? @orkoden – monali
Bien sûr, vous pouvez le faire. C'est assez simple. – orkoden
Oui, mais en créant votre propre script. Sans ressources explicitement pf la langue. –
Voir ma réponse ci-dessus https://stackoverflow.com/a/46451323/1329214 – orkoden