Попытка выяснить, как работать с QuickLook в SwiftUI как на iOS, так и на macOS. Я подозреваю, что в далеком будущем будет некоторый унифицированный API SwiftUI QL, но пока его не видно, поэтому давайте поработаем с тем, что у нас есть ...
Как мне представить и настроить 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 и как лучше go об этом.