【Swift】モーダル表示されたNavigationControllerの子画面で、画面を閉じたことを元の画面に通知する方法

Swift

こんちには、フリーの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の一番下の子画面で画面を閉じた際にコールバックできないので断念しました。

コメント

タイトルとURLをコピーしました