modalInPresentation
을 true로 설정한다.isModalInPresentation = hasChanges
UIPresentationController : 뷰 컨트롤러가 표시되는 시간부터 닫힐 때까지 UIKit은 프레젠테이션 컨트롤러를 사용하여 해당 뷰 컨트롤러에 대한 프레젠테이션 프로세스의 다양한 측면을 관리.
self.presentationController?.delegate = editViewController // present 방식일 때
func presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController) {
// 시스템은 사용자가 Dissmiss 동작을 시도할 때마다 이 대리자 메서드를 호출합니다.
// 'isModalInPresentation'이 false면 이 메서드는 작동하지 않고 바로 Dissmiss.
// 취소 또는 저장 여부를 물어 사용자에게 선택 할 수 있게 한다.
내가 원하는 작업
}
override func viewDidLoad() {
super.viewDidLoad()
self.presentationController?.delegate = self
}
override func viewWillLayoutSubviews() {
isModalInPresentation= updateView.hasChangesModel()
}
extension UpdateViewController: UIAdaptivePresentationControllerDelegate {
func presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController) {
if updateView.hasChangesModel() {
let alertController = UIAlertController(title: "", message: "변경 사항을 폐기할까요?", preferredStyle: .actionSheet)
let disposeAction = UIAlertAction(title: "변경 사항 폐기", style: .default) { [weak self] _ in self?.dismiss(animated: true) }
let cancelAction = UIAlertAction(title: "계속 편집하기", style: .destructive) { _ in return }
alertController.addAction(disposeAction)
alertController.addAction(cancelAction)
present(alertController, animated: true)
return
}
dismiss(animated: true)
}
}