我有一个 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
}
}
您可以使用它代替 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)
}