菜鸟教程小白 发表于 2022-12-11 19:12:20

ios - previewController previewItemAt 未被调用。 iOS 10,swift 3,模拟器


                                            <p><p>我在 Storyboard中创建了一个新的 ViewController 。将其连接到 ListViewController。 ListViewController 将正确的数据填入<code>aboutDict</code>。构建 <code>fileURLs[]</code> 并调用 <code>func numberOfPreviewItems(in: QLPreviewController) -> Int</code> - 调试器显示 <code>fileURLs[]</code> 为预期:</p>

<blockquote>
<p>Printing description of self.fileURLs: ▿ 1 element
    - 0 : file:///Users/kent/Library/Developer/CoreSimulator/Devices/5E23825C-DF99-455A-BEB1-F73398E7759F/data/Containers/Bundle/Application/307ED7DF-C07C-4C0A-BA78-938BABE7C22C/WINSystemInfo.app/ID-51A_E_PLUS2.pdf`</p>
</blockquote>

<p>但是 <code>func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem</code> 和 <code>func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -> Bool</code> 不被调用。</p>

<p>我得到了一个不错的 ViewController,它被插入导航堆栈,并带有正确的后退按钮名称,以及一个带有居中文本“没有要预览的文件”的灰色页面。</p>

<p>按下“返回”按钮时,会调用 <code>func previewControllerWillDismiss(_ controller: QLPreviewController)</code>。所以<em>一些</em>的委托(delegate)和数据源函数正在被调用。</p>

<p>我一定错过了一些简单的东西...... </p>

<p>我在下面附加了我的类 FileViewController.swift:</p>

<pre><code>class FileViewController: QLPreviewController, QLPreviewControllerDelegate, QLPreviewControllerDataSource {

    var aboutDict = ()

    // QuickLook data
    var fileURLs = ()

    // MARK: - Lifecycle

    override func viewDidLoad() {
      super.viewDidLoad()
      let filename = aboutDict[&#34;filename&#34;] as! String?
      let filetype = aboutDict[&#34;filetype&#34;] as! String?

      title = aboutDict[&#34;title&#34;] 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 datasourcefunctions

    func numberOfPreviewItems(in: QLPreviewController) -&gt; Int {
      return fileURLs.count
    }

    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -&gt; QLPreviewItem {
      return fileURLs
    }

    // MARK: - Preview controller delegate functions

    func previewControllerWillDismiss(_ controller: QLPreviewController) {
      debug(&#34;previewControllerWillDismiss&#34;)
    }

    func previewController(_ controller: QLPreviewController, shouldOpen url: URL, for item: QLPreviewItem) -&gt; Bool {
      return true
    }
}
</code></pre>

<p>我错过了什么?</p>

<p>谢谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我刚遇到这个问题,只是因为我忘记在 QLPreviewController 上设置我的数据源...</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - previewController previewItemAt 未被调用。 iOS 10,swift 3,模拟器,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/42711699/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/42711699/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - previewController previewItemAt 未被调用。 iOS 10,swift 3,模拟器