如果您需要在您的 url 中显示除 lastPathComponent 之外的其他标题,您可以将 QLPreviewItem 子类化并提供您自己的标题来实现可选属性:
实例属性声明:
var previewItemTitle: String? { get }
为预览项目显示的标题。
如果您没有为此属性实现 getter 方法,或者您的
方法返回 nil,QuickLook 检查项目的 URL 或内容
正在预览以确定适当的标题以显示给
用户。返回此属性的非零值以提供自定义
标题。
protocol QLPreviewItem : NSObjectProtocol
说明
QLPreviewItem 协议定义了您实现的属性以使您的
应用程序的内容在 QuickLook 预览中可见
(iOS 中的 QLPreviewController 或 macOS 中的 QLPreviewPanel)。方法
在这个协议中也被声明为 NSURL 类的一个类别。
因此,您可以直接使用 NSURL 对象作为预览
项目—前提是您要使用这些项目的默认标题。
默认标题是项目 URL 的最后一个路径组件。如果你
想要提供您自己的预览项目标题,创建您自己的预览
采用此协议的项目对象。
第一个子类 QLPreviewItem:
import UIKit
import QuickLook
class PreviewItem: NSObject, QLPreviewItem {
var previewItemURL: URL?
var previewItemTitle: String?
init(url: URL? = nil, title: String? = nil) {
previewItemURL = url
previewItemTitle = title
}
}
然后在您的控制器中返回 QLPreviewItem 而不是 URL:
Xcode 11 • Swift 5.1
import UIKit
import QuickLook
class ViewController: UIViewController, QLPreviewControllerDelegate, QLPreviewControllerDataSource {
var previewItems: [PreviewItem] = []
override func viewDidLoad() {
super.viewDidLoad()
previewItems = [
.init(url: Bundle.main.url(forResource: "your file 1", withExtension: "ext"),
title: "Custom Title 1"),
.init(url: Bundle.main.url(forResource: "your file 2", withExtension: "ext"),
title: "Custom Title 2"),
]
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
quickLook()
}
func numberOfPreviewItems(in controller: QLPreviewController) -> Int { previewItems.count }
func quickLook(at index: Int = 0) {
let controller = QLPreviewController()
controller.delegate = self
controller.dataSource = self
controller.currentPreviewItemIndex = index
present(controller, animated: true)
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { previewItems[index] }
}