0

我有一个简单的 SwiftUI NavigationView,其中包含一个 NavigationLinks 列表,每个都设置为包含 UIViewControllerRepresentable 的 SwiftUI View 的目标(见下文)。

如何将 UIViewControllerRepresentable UINavigationController 连接到 SwiftUI 提供的根控制器?

import SwiftUI
import QuickLook

struct PublicationView: View {
    @State private var localDocumentURL: URL?
    
    var body: some View {
        QuickLookView(url: localDocumentURL!)
    }
}

struct QuickLookView: UIViewControllerRepresentable {
    let url: URL
    
    func makeUIViewController(context: Context) -> UINavigationController {
        let controller = QLPreviewController()
        controller.dataSource = context.coordinator
        
        let navigationController = UINavigationController(rootViewController: controller)
        return navigationController
    }
    
    func updateUIViewController(_ vc: UINavigationController, context: Context) {
        //
    }
    
    func makeCoordinator() -> Coordinator {
        return Coordinator(parent: self)
    }
    
    class Coordinator: NSObject, QLPreviewControllerDelegate, QLPreviewControllerDataSource {
        
        let parent: QuickLookView
        
        init(parent: QuickLookView) {
            self.parent = parent
        }
        
        func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
            return 1
        }
        
        func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
            return parent.url as NSURL
        }
    }
}

4

0 回答 0