QLPreviewController无法加载多个文件

时间:2018-10-14 09:04:18

标签: ios swift qlpreviewcontroller

我已经将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
这是为什么?我还需要设置其他内容吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

结果是,我误解了for row in reader: row['Hobby'] = list(row['Hobby'].split('|')) 中如何加载多个项目。
我认为,用户必须垂直滚动并看到带有缩略图的侧栏。但是,这仅适用于单个文档中的页面。

我必须水平滚动。
感谢@matt,他为我清除了此问题。