我在我的视图控制器中嵌入了一个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。
为什么会这样呢?我还需要设置其他的东西吗?
发布于 2018-10-14 10:38:30
结果,我误解了如何在QLPreviewController中加载多个项。
我想,用户必须垂直滚动,并看到边条与缩略图。但是,这只适用于单个文档中的页面。
我不得不水平滚动。
多亏了马特,他帮我澄清了这件事。
发布于 2018-10-14 09:55:45
您的整个标题,关于“加载多个文件”,表明了一种误解。我认为您假设QLPreviewController是一种集合视图控制器,它同时显示多个对象。不是,它预览了一份文件。如果它有多个预览项,用户可以侧页到另一个文档,或者从TOC菜单中选择,但它仍然一次只显示一个文档。
此外,您似乎试图使用预览控制器作为嵌入式。子视图控制器你不能,它可以呈现,或者推到导航控制器上,仅此而已。不要试图保留或重用它。不要使用它的视图作为子视图。当是预览的时候,创建控制器并呈现或推送它。当控制器被解职或弹出时,让它死掉。
https://stackoverflow.com/questions/52801100
复制相似问题