共享时不显示文件名称

问题描述 投票:0回答:1

我有一个 SwiftUI 应用程序,我正在尝试使用 ShareSheet 共享 PDF 文件。 PDF 是生成并使用指定名称保存的,但是当我尝试使用 ShareSheet 共享它时,它会使用默认名称发送。有人可以帮助我理解为什么会发生这种情况以及如何让它以指定的名称发送吗?

这是我的 ShareSheet 以及 PDF 生成和共享的代码:

// MARK: SHARE SHEET ITSELF
struct ShareSheet: UIViewControllerRepresentable {
    let activityItems: [Any]
    let applicationActivities: [UIActivity]?

    func makeUIViewController(context: Context) -> UIActivityViewController {
        let activityViewController = UIActivityViewController(
            activityItems: activityItems,
            applicationActivities: applicationActivities
        )
        return activityViewController
    }

    func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {
        // Nothing to update here
    }
}

// MARK: SAVING PDF
func saveScannedImagesAsPDF() {
    // Check if there are scanned images to save
    
    let fileNameTrimmed = fileName.trimmingCharacters(in: .whitespacesAndNewlines)
    guard !fileNameTrimmed.isEmpty else {
        print("File name cannot be empty.")
        return
    }
    
    guard !scannedImages.isEmpty else {
        print("No scanned images to save.")
        return
    }
    
    // Get the documents directory URL
    if let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        // Create a PDF document
        let pdfDocument = PDFDocument()
        
        // Iterate through the scanned images and add them to the PDF
        for image in scannedImages {
            if let pdfPage = PDFPage(image: image) {
                pdfDocument.insert(pdfPage, at: pdfDocument.pageCount)
            }
        }
        
        let pdfFileName = "\(fileName).pdf"
        
        // Create the PDF file URL
        let pdfFileURL = documentsDirectory.appendingPathComponent(pdfFileName)
        
        // Save the PDF to the specified URL
        pdfDocument.write(to: pdfFileURL)
        
        // Optionally, you can save the URL to the array of signatureImageURLs
        // signatureImageURLs.append(pdfFileURL)
        
        // Print the URL of the saved PDF
        print("Saved PDF at: \(pdfFileURL)")
        
        fileSaved.toggle()
    } else {
        print("Unable to access the document directory.")
    }
}

// MARK: CALLING SHEET
.sheet(isPresented: $isShareSheetPresented, onDismiss: {
        // Optional: Code to run after the share sheet is dismissed
    }) {
        if let pdfData = sendingFile {
            ShareSheet(activityItems: [pdfData], applicationActivities: nil)
        }
    }

// MARK: - APPENDING FILE 
private func sendFile(fileURL: URL) {
    if let pdfData = try? Data(contentsOf: fileURL) {
        
        self.sendingFile = pdfData
        print(sendingFile)
        
        self.isShareSheetPresented = true
        
    }
}

swift swiftui share uiactivityviewcontroller
1个回答
0
投票

您可以使用它代替 sendFile 函数,它会为此调用正确的 ViewController。

    private func share(fileURL: URL) {

        let activityVC = UIActivityViewController(activityItems: [fileURL], applicationActivities: nil)
        
        UIApplication.shared.windows.first?.rootViewController?.present(activityVC, animated: true, completion: nil)

    }
© www.soinside.com 2019 - 2024. All rights reserved.