previewController previewItem未被调用。 iOS 10,swift 3,模拟器

时间:2017-03-10 06:26:24

标签: ios swift3 qlpreviewcontroller

我在故事板中创建了一个新的视图控制器。将它连接到ListViewController。 ListViewController将正确的数据填入aboutDict[String:Any]。构建fileURLs[]并调用func numberOfPreviewItems(in: QLPreviewController) -> Int - 调试器显示fileURLs[]符合预期:

  

打印self.fileURLs的说明:▿1个元素      - 0:file:/// Users / kent / Library / Developer / CoreSimulator / Devices / 5E23825C-DF99-455A-BEB1-F73398E7759F / data / Containers / Bundle / Application / 307ED7DF-C07C-4C0A-BA78-938BABE7C22C / WINSystemInfo。应用程序/ ID-51A_E_PLUS2.pdf`

但未调用func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItemfunc previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool

我得到了一个很好的ViewController,它被推入导航堆栈,后面的按钮名称正确,还有一个带有居中文本的灰色页面"没有要预览的文件"。

按下'后退'按钮,func previewControllerWillDismiss(_ controller: QLPreviewController)被调用。因此,正在调用一些委托和数据源函数。

我一定错过了一些简单的事情......

我在下面附上了我的类FileViewController.swift:

class FileViewController: QLPreviewController, QLPreviewControllerDelegate, QLPreviewControllerDataSource {

    var aboutDict = [String: Any]()

    // QuickLook data
    var fileURLs = [QLPreviewItem]()

    // MARK: - Lifecycle

    override func viewDidLoad() {
        super.viewDidLoad()
        let filename = aboutDict["filename"] as! String?
        let filetype = aboutDict["filetype"] as! String?

        title = aboutDict["title"] as! String?
        dataSource = self
        delegate = self

        if let fileUrl = Bundle.main.url(forResource: filename, withExtension: filetype, subdirectory: nil, localization: nil)
        {
            let filePreview = fileUrl as QLPreviewItem
            fileURLs.append(filePreview)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Preview controller datasource  functions

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

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

    // MARK: - Preview controller delegate functions

    func previewControllerWillDismiss(_ controller: QLPreviewController) {
        debug("previewControllerWillDismiss")
    }

    func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool {
        return true
    }
}

我错过了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

我刚遇到这个问题,这只是因为我忘了在QLPreviewController上设置我的数据源......