I am using QLPreviewController with SwiftUI using UIViewControllerRepresentable. If I try to delete or insert pages of large size PDF, QLPreviewController is not calling delegate methods (didUpdateContentsOf, didSaveEditedCopyOf).
struct QuickLookController: UIViewControllerRepresentable {
@Environment(\.dismiss) var dismiss
weak var delegate: QLPreviewControllerDelegate?
weak var dataSource: QLPreviewControllerDataSource?
func makeUIViewController(context: Context) -> UINavigationController {
let controller = context.coordinator.controller
controller.delegate = delegate
controller.dataSource = dataSource
controller.navigationItem.rightBarButtonItem = context.coordinator.dismissButton
return UINavigationController(rootViewController: controller)
}
func updateUIViewController(_ viewController: UINavigationController, context: UIViewControllerRepresentableContext<QuickLookController>) { }
func makeCoordinator() -> Self.Coordinator {
.init(parent: self)
}
@MainActor
class Coordinator: NSObject {
var parent: QuickLookController
init(parent: QuickLookController) {
self.parent = parent
}
lazy var controller: QLPreviewController = {
let controller = QLPreviewController()
return controller
}()
lazy var dismissButton: UIBarButtonItem = {
let button = UIBarButtonItem(
title: NSLocalizedString("Done", comment: ""),
style: .plain,
target: self,
action: #selector(rightButtonTapped(_:))
)
button.tag = 2
return button
}()
@objc func rightButtonTapped(_ sender: Any) {
controller.dismiss(animated: true)
}
}
}
// MARK: QuickLook
extension ViewerModel: QLPreviewControllerDataSource, QLPreviewControllerDelegate {
public func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
1
}
public func previewController(
_ controller: QLPreviewController,
previewItemAt index: Int
) -> QLPreviewItem {
let title = self.document
.documentURL?
.lastPathComponent ?? ""
let url = PDFManager
.directory
.appendingPathComponent(title) as NSURL
return url as QLPreviewItem
}
public func previewControllerDidDismiss(_ controller: QLPreviewController) {
}
public func previewControllerWillDismiss(_ controller: QLPreviewController) {
}
✔️ It's same even if I set it to updateContents
public func previewController(_ controller: QLPreviewController, editingModeFor previewItem: QLPreviewItem) -> QLPreviewItemEditingMode {
.createCopy
}
✔️ Not called with Large Size PDF
public func previewController(_ controller: QLPreviewController, didUpdateContentsOf previewItem: QLPreviewItem) {
}
✔️ Not called with Large Size PDF
public func previewController(_ controller: QLPreviewController, didSaveEditedCopyOf previewItem: QLPreviewItem, at modifiedContentsURL: URL) {
}
}