我在我的视图控制器中嵌入了一个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
}

结果只显示了一个文档,这是数组中的第一个文档。我在上面添加了print语句,以验证downloadedDocuments数组中是否有多个文档。它打印:
count: 5
1/5, id: 251

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

最佳答案

你的整个标题,关于“加载多个文件”,暗示了一种误解。我认为您假设QLPreviewController是一种同时显示多个对象的集合视图控制器。不是。它预览一个文档。如果它有多个预览项,用户可以侧页到另一个文档,或者从TOC菜单中选择,但它仍然一次只显示一个文档。
另外,您似乎正在尝试将预览控制器用作嵌入式。子视图控制器。你不能。它可以被呈现,或者被推到导航控制器上;仅此而已。不要试图保留或重用它。不要将其视图用作子视图。当需要预览时,创建控制器并呈现或推动它。当控制器被解除或弹出时,让它死掉。

关于ios - QLPreviewController不加载多个文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52801100/

10-13 09:04