Enable Saving Confirmation when Exiting PDF in Swift for iOS

Disable document auto saving and display a saving confirmation dialog before exiting. Get additional resources by visiting our guide on saving PDF documents in iOS.


//
// Copyright © 2017-2025 PSPDFKit GmbH. All rights reserved.
//
// The Nutrient sample applications are licensed with a modified BSD license.
// Please see License for details. This notice may not be removed from this file.
//
import PSPDFKit
import PSPDFKitUI
class SavePermissionExample: Example, PDFViewControllerDelegate {
override init() {
super.init()
title = "Save permission alert before closing"
category = .annotations
priority = 400
}
override func invoke(with delegate: ExampleRunnerDelegate) -> UIViewController {
let document = AssetLoader.writableDocument(for: .welcome, overrideIfExists: false)
/*
Note: Having auto saving of a document disabled and asking to save before exiting isn't a 100% reliable approach on iOS approach, since the app can always be closed using the multitasking switcher, where this action will not be called, resulting in loss of the made changes.
*/
let controller = SavePermissionViewController(document: document) {
// Disable autosaving of the PDF.
$0.isAutosaveEnabled = false
}
return controller
}
}
private class SavePermissionViewController: PDFViewController {
override func commonInit(with document: Document?, configuration: PDFConfiguration) {
super.commonInit(with: document, configuration: configuration)
let exitButton = UIBarButtonItem(title: "Exit", style: .done, target: self, action: #selector(exit))
// Add custom exit button that shows the alert controller when tapped
self.navigationItem.leftBarButtonItems = [exitButton]
}
@objc func exit() {
// Check if the document has any changes or not. Exit immediately if it doesn't.
guard let document = self.document, document.hasDirtyAnnotations == true else {
_ = self.navigationController?.popViewController(animated: true)
return
}
let alertController = UIAlertController(title: nil, message: "Do you want to save the changes made to the document?", preferredStyle: .alert)
let saveAction = UIAlertAction(title: "Save", style: .default) { _ in
guard let document = self.document else { return }
// Manually save the document and exit after saving
document.save { _ in
self.navigationController?.popViewController(animated: true)
}
}
let exitAction = UIAlertAction(title: "Exit without save", style: .destructive) { _ in
self.navigationController?.popViewController(animated: true)
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
alertController.addAction(exitAction)
alertController.addAction(saveAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
}
}

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.