如何使用SwiftUI按钮打开本地PDF文件? [英] How can I open a local PDF file using a SwiftUI button?

查看:121
本文介绍了如何使用SwiftUI按钮打开本地PDF文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在点击按钮时通过新视图显示本地PDF文件.我尝试使用UIViewRepresentable WebView来执行此操作,但是它不起作用(我仅通过NavigationList使用了WebView.)

I want to display a local PDF file through a new view when I tap a button. I tried doing that using a UIViewRepresentable WebView but it's not working (I have worked with WebView only through NavigationList).

我留下了代码,但是如果WebView不是最佳的,请随时提出更好的选择.

I leave my code, but feel free to suggest better option if the WebView is not the most optimal.

ButtonView

import SwiftUI

struct ResumeView: View {

    let sfSymbol: String
    let text: String

    let fileUrl = Bundle.main.path(forResource: "Resume", ofType: "pdf")

    var body: some View {
        RoundedRectangle(cornerRadius: 25)
            .fill(Color.white)
            .frame(height: 50.0)
            .overlay(
                HStack {
                    Image(systemName: sfSymbol)
                        .foregroundColor(.init(red: 0.20, green: 0.33, blue: 0.55, opacity: 1.00))
                    Button(action: {
                        WebView(urlString: self.fileUrl)
                    }) {
                    Text(text)
                        .foregroundColor(.black)
                    }
            })
    }
}

WebView

import Foundation
import SwiftUI
import WebKit 

struct WebView: UIViewRepresentable {

    let urlString: String?

    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
        if let safeUrlString = urlString {
            if let url = URL(string: safeUrlString) {
                let request = URLRequest(url: url)
                uiView.load(request)
            }
        }
    }
}

推荐答案

我们使用 PDFKit 加载本地 PDF 文件.请尝试以下代码.

Using PDFKit we load local PDF file. Please try below code.

import SwiftUI
struct ResumeView: View {
    ....
    let fileUrl = Bundle.main.url(forResource: "Resume", withExtension: "pdf")!
    var body: some View {
        ....
        Button(action: {
            PDFKitView(url: self.fileUrl)
        }) {
            Text(text)
                .foregroundColor(.black)
        }
        ....
    }
}

PDFKitView

import PDFKit
struct PDFKitView: View {
    var url: URL
    var body: some View {
        PDFKitRepresentedView(url)
    }
}

struct PDFKitRepresentedView: UIViewRepresentable {
    let url: URL
    init(_ url: URL) {
        self.url = url
    }

    func makeUIView(context: UIViewRepresentableContext<PDFKitRepresentedView>) -> PDFKitRepresentedView.UIViewType {
        let pdfView = PDFView()
        pdfView.document = PDFDocument(url: self.url)
        pdfView.autoScales = true
        return pdfView
    }

    func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<PDFKitRepresentedView>) {
        // Update the view.
    }
}

这篇关于如何使用SwiftUI按钮打开本地PDF文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆