How to preview a ppt document coming from the url in iOS11 swift 4

人盡茶涼 提交于 2019-12-11 09:53:17

问题


I am trying to preview the pdf and ppt documents coming from the remote urls and I am using QuickLookPreviewController to preview documents. So far I am able to preview pdfs and videos but when I open the ppt it opens the quickLookController and instead of the ppt preview I am seeing nothing

I don't know if this is the problem with QLPreviewController or there is some extra things I need to do for it to open. I am posting my code below so that you can understand whats wrong.

 import UIKit
 import Alamofire
 import QuickLook

 class AchievementsDetailViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout,QLPreviewControllerDataSource {

 let appDelegate = UIApplication.shared.delegate as! AppDelegate
 var fileURLs = [URL]()
 let quickLookController = QLPreviewController()

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "Achievements View"
    quickLookController.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    getAllAchievementsDetails()
}
func extractAndBreakFilenameInComponents(fileURL: NSURL) -> (fileName: String, fileExtension: String) {

    let fileURLParts = fileURL.path!.components(separatedBy: "/")
    let fileName = fileURLParts.last
    let filenameParts = fileName?.components(separatedBy: ".")

    return (filenameParts![0], filenameParts![1])
}

func getAllAchievementsDetails() {

fileURLs = []
let detailAchievementsURL = "\(WebAPI.baseURL + 
WebAPI.detailAchievementAPI)\(appDelegate.userId)\(WebAPI.achievementId + id)"
    Alamofire.request(detailAchievementsURL, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON {response in
        switch response.result {
        case .success:
            let resposneString = response.result.value as! String
            guard let detailAchievementData = Universal.convertStringToDictionary(text: resposneString) else {return}
            switch response.response?.statusCode {
            case 200?:
                let imagesList = detailAchievementData["lstimages"] as! [[String : Any]]
                for imageData in imagesList {
                    guard let imagePath = imageData["imagesurl"] else {return}
                    let imageString = "\(WebAPI.mediaBaseURL)\(imagePath)"
                    let image = imageString.replacingOccurrences(of: "~", with:"")
                    guard let imageURL = URL(string: image) else {return}
                    self.fileURLs.append(imageURL)
                }
                let videosList = detailAchievementData["lstvideos"] as! [[String : Any]]
                for videoData in videosList {
                    guard let videoPath = videoData["videossurl"] else {return}
                    let videoString = "\(WebAPI.mediaBaseURL)\(videoPath)"
                    let video = videoString.replacingOccurrences(of: "~", with: "")
                    guard let videoURL = URL(string: video) else {return}
                    self.fileURLs.append(videoURL)
                }
                let docsList = detailAchievementData["lstdocuments"] as! [[String : Any]]
                for documentData in docsList {
                    guard let documentPath = documentData["DocumentPath"] else {return}
                    let documentString = "\(WebAPI.mediaBaseURL)\(documentPath)"
                    let document = documentString.replacingOccurrences(of: "~", with: "")
                    guard let escapedAddress = document.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) else {return}
                    guard let documentURL = URL(string: escapedAddress) else {return}
                    self.fileURLs.append(documentURL)
                }
            case 500?:
                print(resposneString)
            default:
                print(resposneString)
            }                
        case .failure(let error):
                print(error.localizedDescription)
        }
        self.achievementsCollectionView.reloadData()
    }

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return fileURLs.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "mediaCell", for: indexPath) as! AchievementDetailCell
    return cell
}

func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
    return fileURLs.count
}

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
    return fileURLs[index] as QLPreviewItem
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let currentFileParts = extractAndBreakFilenameInComponents(fileURL: fileURLs[indexPath.row] as NSURL)
    if currentFileParts.fileExtension == "pdf" || currentFileParts.fileExtension == "ppt" {
        if QLPreviewController.canPreview(fileURLs[indexPath.row] as QLPreviewItem) {
            quickLookController.currentPreviewItemIndex = indexPath.row
            navigationController?.pushViewController(quickLookController, animated: true)
        }
    }
}

I hope everything is fine from my code...If not, please guide me.. Thanks in advance

来源:https://stackoverflow.com/questions/51870622/how-to-preview-a-ppt-document-coming-from-the-url-in-ios11-swift-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!