質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2226閲覧

iOSアプリでモーダル表示中にタブを切り替える(Swift3)

_WY_

総合スコア7

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/05/16 13:52

編集2017/05/17 05:47

###前提・発生している問題
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

通常、遷移したときは、裏側にあるViewControllerは削除されます。

遷移先ViewControllerのmodalPresentationStyleを.overFullScreen .overCurrentContextにしてみて下さい。(私自身は使ったことがなく、両者の違いなどについては把握していません)

投稿2017/05/17 00:15

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_WY_

2017/05/17 05:43 編集

ご回答ありがとうございます!勉強になります! 現状、モーダルVCのmodalPresentationStyleは.overCurrentContextにしています(記載漏れでした、申し訳有りません)。.overFullScreenも試してみたところ、下のタブバーも覆われてしまい、目指す仕様とは異なる形となってしまいました。 モーダル表示中にタブを切り替えると、modalPresentationStyleにかかわらず裏側のViewControllerは削除されてしまうのでしょうか…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問