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

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

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

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

Swift

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

Q&A

解決済

2回答

3246閲覧

TabBarControllerとNavigationControllerを併用した際のModalの表示方法

panyayan

総合スコア36

iOS

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

Swift

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

0グッド

0クリップ

投稿2018/10/27 08:48

編集2018/10/29 01:58

現在タブバーを使用して画面の切り替えを行なっています。
ある特定のボタンを押した際にViewControllerModalで表示したいと思っています。
*イメージ的にはインスタグラムのカメラボタンを押した際のモーダルです。

検索したところ、下記のコードModalCodeを使用することによって私が求めている処理を行うことができるようですが、動きませんでした。
模索しているうちにTabBar→NavigationController→TweetSheareViewControllerとなっているためだとわかりました。
中間のナビゲーションコントローラーを消したところ下記のコードでも動きました。
そこでタイトルの通り併用した場合のModalでの表示はどのようにコードを書けばよろしいでしょうか

TabBarModal

1 func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 2 if viewController is ShareTweetViewController { //もしShareTweetViewController.swiftをclass指定してあるページ行きのボタンをタップしたら 3 if let newVC = tabBarController.storyboard?.instantiateViewController(withIdentifier: "ShareTweetViewController"){ //withIdentifier: にはStory Board IDを設定 4 tabBarController.present(newVC, animated: true, completion: nil)//newVCで設定したページに遷移 5 return false 6 } 7 } 8 return true 9 } 10

StoryBoard

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

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

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

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

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

fuzzball

2018/10/29 00:12

「ViewをModalで表示したいと思っています」 ← ViewControllerではなくてView?
fuzzball

2018/10/29 00:33

ViewControllerの繋がりがイマイチ分からないのですが、「TabBar→NavigationController→ViewControllerとなっている」 ← このViewControllerがShareTweetViewControllerということですか?
panyayan

2018/10/29 01:04

言葉足らずでした。ViewControllerです。>このViewControllerがShareTweetViewControllerということですか? はいその認識で合っています。
fuzzball

2018/10/29 01:07

TweetSheareViewControllerは、Soryboard上ではNavigationControllerの上に乗っているけど、NavigationController無しでモーダル表示したいということでしょうか?
panyayan

2018/10/29 01:24

はいそのような形ですが、NavigationControllerを含めてmodal表示したいです。
fuzzball

2018/10/29 01:30

idが"ShareTweetViewController"なのはNavigationControllerですか?
panyayan

2018/10/29 01:59

ストーリーボードの写真を追加しました。このストーリーボードに繋がっているのがTabBarControllerです
fuzzball

2018/10/29 02:13

「動きませんでした」というのは、具体的にはどうなるのでしょうか?
guest

回答2

0

NavigationControllerを含めてmodal表示したいです

ということであれば、NavigationControllerをpresentしないとダメなのでは?

投稿2018/10/29 01:55

fuzzball

総合スコア16731

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

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

0

ベストアンサー

viewController側からpresentで表示できます
tabbarController側から表示が必要ということですか?

投稿2018/10/28 13:45

kosanai

総合スコア471

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

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

panyayan

2018/10/29 01:06

ご回答ありがとうございます。 >tabbarController側から表示が必要ということですか? はい。タブバーのアイコンを押した際にModalで表示したいです
kosanai

2018/10/29 02:18 編集

なるほど 極力TabBarControllerから現在表示中のviewController(navigatioinController)を取得して、それを用いてpresentするのをオススメします let nav = self.tabBarController?.selectedViewController nav?.present(vc, animated: true, completion: nil) ちなみに、tab -> nav -> viewController の構成なら、見えているNavigationControllerはnavのものになります (tabの前にnavを置くことも可能ですが非常に混乱します。そうしなくても実装できるように今のiOSバージョンは作られています。tabのnavは基本考えないほうがいいです。昔やって後悔しました) 全画面共通の遷移ボタンを作るなら、addMenuButton()のような関数を作ってviewDidLoadで全画面に都度設定する形になります(iOS10以前では少し事情が変わると思うので注意してください)
panyayan

2018/10/29 03:45

ありがとうございます!コードを参考にして思っていた動きができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問