前提・実現したいこと
SwiftでModalを閉じた時、親Viewでの動作を実装したいです。
また、子ViewはNavigationControllerでEmbed inされています。
該当のソースコード
Swift
1//TableViewのAccessoryを押した時 2 func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { 3 let detail = storyboard?.instantiateViewController(identifier: "Detail") 4 present(Detail!, animated: true, completion: nil) 5 }
少し整理したいのですが、
1)Navigation Bar で管理されている View Controller から子の View Controller を表示し、戻ってきた時に処理をしたい(上のコードだとそういうふうに読み取れます)
2) 実は、子もNavigationBar で管理させたくて、その際に戻ってきた時の処理をした
のどちらになりますでしょうか。
iOS13 以降は、モーダルで通常表示させた ViewController(子)を dismissしても、親 ViewController の viewWillAppear は呼び出されない仕様に変更されています。
一般的な解決方法は次のリンクが詳しいと思います。
https://qiita.com/fummicc1_dev/items/a30e3cbfbf1148b0ec84
おそらく(2)です。
遷移先にNavigationBarを表示させたかったので、NavigationViewで管理しています。
NavigationBar で表示させたければ、present ではなく pushviewcontroller を使うのですが、このあたりのご理解はどのような感じでしょうか。
ご提示のコードだと present なので、NavigationController の管理下には置かれなくなると思います。
https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621887-pushviewcontroller
Storyboardは追加した画像のようになっています。
画像の左のViewから真ん中のNavigationViewを遷移先に指定しています。
そのため、一番右のViewを閉じた際に、presentationControllerDidDismissが呼ばれませんでした。