Avatar
モーダル遷移後の処理について質問があります。 現在ハンバーガーメニューを実装するために、2つViewControllerを用意しており(遷移元の、遷移元のRecordViewController、遷移先のSideMenuViewControllerです)RecordVCからSideMenuVCまでがコード上でモーダル遷移しているのですが、SideMenuVCからRecordVCに戻る際に「SideMenuVCのモーダル遷移後に、値の受け渡しを行い、RecordVCの関数を呼び出す」ことができず困っております。 https://tech.amefure.com/swift-uikit-modal-dismiss こちらの記事を参考に、presentationControllerを使う方法を実践したのですが、モーダル遷移が終了する前に呼び出されてしまい、値の受け渡しができませんでした。 self.dismiss(animated: true) { let recordViewController: RecordViewController = self.storyboard?.instantiateViewController(withIdentifier: "RecordViewController") as! RecordViewController recordViewController.afterSideViewController() このようにクロージャーを用いた方法も試してみたのですが、遷移後に呼ばれるafterSideViewControllerにて値の受け渡しはうまくいきましたが、UILabelを表示させようとしたところ、Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional valueと出てしまいました。(他のところで同じラベルを表示させようとするとうまくいくためUILabelに問題があるわけではないようです。) どのようにすれば希望通りの動作になりますでしょうか。ご回答いただけますと幸いです。 (edited)
SwiftのUIKitでモーダルを閉じたことを検知する方法は2種類あり、viewWillAppearメソッドで検知する方法とpresentationControllerDidDismissメソッドで検知する方法です。iOS12とiOS13でfullScreenから変更されているため明示的なスタイルの指定が必要になります。またモーダルの場合は親側のメソッドを子側から呼び出そうとした際に起きたエラーもあわせて解説していきます。