###前提・発生している問題
Swift3で以下のような構成のアプリを作成しており、モーダル表示の実装を試みています。
- UITabBarController (keyWindowのrootViewControllerです)
---FirstViewController (以下1VC、ここからモーダル表示を行います)
---SecondViewController (以下2VC)
- ModalViewController (以下モーダルVC)
「画面下のTabBarは表示させたままモーダル表示し、モーダル表示中もタブの切替が行える」といった仕様にしたいため、UITabBarControllerからではなく1VCからモーダルVCへ遷移させようとしています。
遷移自体の実装は完了し、基本的には問題なく動作するのですが、
1VCタブでモーダルVCを表示しているときに2VCのタブへ移り、1VCタブに戻ってモーダルを閉じる
という操作を行うと、1VCではなくkeyWindowが表示されてしまいます。しかしその後再び2VCタブに移り1VCタブに戻ると、1VCが正常に表示されます。アプリが落ちたり、何らかのエラーメッセージが出たりといったことは起こっておらず、この問題の解決策がどうしてもわからなかったので質問させていただきました。
###該当のソースコード
/***** UITabBarController *****/ // VCsには、1VCと2VCのインスタンスを要素として持つ配列が格納されています let tabBarController = UITabBarController() tabBarController.setViewControllers(VCs, animated: false) /***** FirstViewController *****/ // 画面上のボタンを押すと以下が実行され、モーダルVCへ遷移します let modalVC = ModalViewController() // (H29.05.17追記: modalPresentationStyleは.overCurrentContextを指定しています) modalVC.modalPresentationStyle = .overCurrentContext self.present(modalVC, animated: true, completion: nil) /***** ModalViewController *****/ // 画面上のボタンを押すと以下が実行され、1VCへ戻ります(通常は正しく動作します) // 一度タブを2VCに切り替えてから再びこの画面に戻り、以下のコードを実行すると、1VCが表示されなくなります self.dismiss(animated: true, completion: nil)
###試したこと
UITabBarControllerのselectedViewControllerや、ModalViewControllerのpresentingViewControllerも調べてみましたが、きちんと1VCが入っているようでした。他にも、dismissのcompletionの中で1VCのloadView()やviewDidLoad()などを実行してみたり、1VC.viewのalphaを1にしてみたりしましたが、やはり後ろのkeyWindowが表示されてしまいました(keyWindowが表示されていると判断したのは、keyWindowの背景色(にしか使用していない色)が画面に表示されたためです)。
解決策をご存知の方がいらっしゃいましたら、お教え頂けますと幸いです。よろしくお願いいたします。
###補足情報
使用言語: Swift 3.1
開発環境: Xcode 8.3.2
動作環境: iOS 10.3.1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/17 05:43 編集