QLPreviewController 不加载多个文件

QLPreviewController not loading multiple files

我在我的视图控制器中嵌入了一个 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
这是为什么?我还需要设置什么吗?

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

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

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

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