Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save MatthewWaller/1bdd48acdaa9eaaca85f2e25d6fce410 to your computer and use it in GitHub Desktop.
Save MatthewWaller/1bdd48acdaa9eaaca85f2e25d6fce410 to your computer and use it in GitHub Desktop.
import Combine
import QuickLook
class PreviewControllerHolder: UIViewController {
var cancellables = Set<AnyCancellable>()
var url: URL
var startEditing: PassthroughSubject<Void, Never>
var endEditing: () -> Void
var previewController = QLPreviewController()
init(url: URL, startEditing: PassthroughSubject<Void, Never>, endEditing: @escaping () -> Void) {
self.url = url
self.startEditing = startEditing
self.endEditing = endEditing
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
url = URL(fileURLWithPath: "")
startEditing = PassthroughSubject<Void, Never>()
endEditing = { }
super.init(coder: coder)
}
override func viewDidLoad() {
super.viewDidLoad()
view.alpha = 0
previewController.delegate = self
previewController.dataSource = self
startEditing
.sink { [weak self] in
guard let self = self else { return }
self.present(self.previewController, animated: true, completion: nil)
}
.store(in: &cancellables)
}
}
extension PreviewControllerHolder: QLPreviewControllerDataSource {
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
url as QLPreviewItem
}
}
extension PreviewControllerHolder: QLPreviewControllerDelegate {
func previewController(_ controller: QLPreviewController, editingModeFor previewItem: QLPreviewItem) -> QLPreviewItemEditingMode {
.updateContents
}
func previewControllerDidDismiss(_ controller: QLPreviewController) {
endEditing()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment