こんちには、フリーのITエンジニアでWeb(PHP:Laravel)のバッグエンドをメインにフルリモートでお仕事させて頂きながら、個人開発でiOSアプリを作っているMoritaです。
画像のように、モーダルで呼び出した画面にNavigationControllerを使用して、その配下の画面で何かしらの変更を加え、そのまま画面を閉じた際に、呼び出し元の画面のUITableViewを再読み込みさせたいと思いました。
通知する方法
UIAdaptivePresentationControllerDelegate#presentationControllerDidDismiss()を使用すれば、呼び出された画面が閉じれれた後に処理をすることができます。
呼び出しもとの画面でデリゲートを実装します。
extension ParentViewController: UIAdaptivePresentationControllerDelegate {
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
self.collectionView?.reloadData()
}
}
呼び出し元の画面から、モーダルで呼び出し先の画面を呼びます。
呼び出し先の画面でUINavigationControllerを使用しているのでpresentationController.delegate = self としています。
UINavigationControllerを使用している場合、このようにしないと画面が閉じられた際に処理が呼ばれないです。
let vc = DisplaySetting2ViewController.createInstance()
let nav = UINavigationController(rootViewController: vc)
nav.presentationController?.delegate = self
vc.vocabularyBookModel = bookModel
self.present(nav, animated: true, completion: nil)
まとめ
はじめはコールバックで処理させようかと思いましたが、煩雑になるし、navigationの一番下の子画面で画面を閉じた際にコールバックできないので断念しました。
コメント