【问题标题】:QLPreviewController not loading multiple filesQLPreviewController 不加载多个文件
【发布时间】:2018-10-14 09:04:18
【问题描述】:

我在我的视图控制器中嵌入了一个QLPreviewController 作为子视图控制器,并为其设置了委托和数据源:

qlPreviewController.delegate = self
qlPreviewController.dataSource = self

在我的viewDidLoad 中,我正在下载一个远程文档。下载完成后,我重新加载QLPreviewController 以显示该文档。这工作正常。
现在,我想同时显示多个文档。因此,我下载了多个文档,设置了一个数组,然后重新加载了QLPreviewController

这里是实现的数据源方法:

func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
    print("count:", downloadedDocuments.count)
    return downloadedDocuments.count
}

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
    print("\(index+1)/\(downloadedDocuments.count), id:", downloadedDocuments[index].id)
    return downloadedDocuments[index].localURL as QLPreviewItem
}

最终的结果是只显示一个文档,这是数组中的第一个文档。我添加了上面的打印语句,以验证downloadedDocuments 数组中有多个文档。它打印:

count: 5
1/5, id: 251

如您所见,它只调用了一次previewItemAtIndex,索引仍然是0
这是为什么?我还需要设置什么吗?

【问题讨论】:

    标签: ios swift qlpreviewcontroller


    【解决方案1】:

    关于“加载多个文件”的整个标题暗示了一种误解。我认为您假设 QLPreviewController 是一种同时显示多个对象的集合视图控制器。不是。它预览一个文档。如果它有多个预览项目,用户可以横向翻页到另一个文档,或者从 TOC 菜单中选择,但它仍然一次只显示一个文档。

    此外,您似乎正在尝试将预览控制器用作嵌入式。子视图控制器。你不能。它可以呈现或推送到导航控制器上;就这样。不要试图保留或重复使用它。不要将其视图用作子视图。当需要预览时,创建控制器并展示或推送它。当控制器被解除或弹出时,让它死掉。

    【讨论】:

    • 好的。在numberOfPreviewItems 我需要传递所有文件(在我的情况下是在文档文件夹中),对吗?如果我没记错的话,那就是items。如果不是,那么什么是item
    • 问题是你从未见过包含多个项目的预览控制器,所以你不知道会发生什么?
    • 呃,也许吧。我认为在侧栏中,您不仅可以看到当前文件的页面,还可以看到下一个文件。我刚刚检查了文件应用程序中的行为并实现了侧滚动。这是否意味着在一个包含 5 个文档的文件夹中,Apple 正在打开一个 QLPreviewController 并将它们传递到那里,然后它会自动处理滚动(左右滚动)?
    • 哦,天哪,它实际上在我的实现中有效,我只是尝试获取那个侧边栏并垂直滚动。我实际上可以横向滚动。感谢您解决这个问题!
    • @matt 我很想听听您为什么不应该将 QLPreviewController 作为子视图控制器嵌入的原因。由于我们无法使用自定义控件覆盖 QLPreviewController,因此将其嵌入为子视图控制器将允许我们拥有它的单个实例,并使用我们的自定义 UI 控制它当前从“外部”预览的文档。
    【解决方案2】:

    原来,我误解了如何在 QLPreviewController 中加载多个项目。
    我想,用户必须垂直滚动才能看到带有缩略图的侧边栏。但是,这仅适用于单个文档中的页面。

    我不得不水平滚动。
    感谢@matt,他为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多