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,他帮我解决了这个问题。
我在我的视图控制器中嵌入了一个 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,他帮我解决了这个问题。