Пытаюсь понять, как работать с QuickLook в SwiftUI как на iOS, так и на macOS. Я подозреваю, что в далеком будущем появится какой-то единый SwiftUI QL API, но пока его не видно, так что давайте поработаем с тем, что у нас есть ...
Как представить и настроить QLPreviewPanel из моего представления SwiftUI? Пока у меня есть это:
struct ItemView: View {
let previewPanelThing = PreviewPanelThing()
var body: some View {
Button("OSX preview") {
print("osx preview")
if let previewPanel = QLPreviewPanel.shared() {
self.previewPanelThing.updateControllerForPanel(previewPanel)
previewPanel.makeKeyAndOrderFront(self.previewPanelThing)
}
}
}
}
class PreviewPanelThing: QLPreviewPanelDataSource {
func updateControllerForPanel(_ panel: QLPreviewPanel) {
print("updating controller")
panel.updateController()
}
func numberOfPreviewItems(in panel: QLPreviewPanel!) -> Int {
print("number of items")
return 1
}
func previewPanel(_ panel: QLPreviewPanel!, previewItemAt index: Int) -> QLPreviewItem! {
print("requesting preview item")
let fileURL: URL = Bundle.main.url(forResource: "Thinking-of-getting-a-cat", withExtension: "png")!
return fileURL as QLPreviewItem
}
}
Это не работает. Я подозреваю, что это связано с тем, что в документации QLPreviewPanel сказано: The preview panel follows the responder chain and adapts to the first responder willing to control it.
Мой previewPanelThing
экземпляр не входит в цепочку пользовательского интерфейса и ответчика. Я не знаю, как цепочка респондентов работает в SwiftUI и как это лучше всего сделать.