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

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

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

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

Q&A

解決済

1回答

528閲覧

TabBarControllerとNavigationControllerを使用した際の画面遷移について

pftyuk

総合スコア52

Swift

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

0グッド

0クリップ

投稿2019/08/01 15:15

前提・実現したいこと

TabBarControllerとNavigationControllerを組み合わせた際の画面遷移について教えて下さい。

実現したいことは、下部のタブを残した状態で次の画面に遷移をさせたいです。
segueによる画面遷移を試したところ、次の画面がモーダル表示になってしまい
下部のタブが見えない状態になってしまいます。

試したことを記載しますが、解決にまで至らなかったので
ご教示頂けると幸いです。宜しくお願い致します。

発生している問題・エラーメッセージ

画面遷移時に、画面遷移先がモーダル表示になってしまい下部のタブが見えなくなる

該当のソースコード

Swift

1import UIKit 2 3class ChartsMenuViewController: UIViewController { 4 5 @IBOutlet weak var tableView: UITableView! 6 7 private let viewModel = ChartsMenuViewModel() 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 self.configureTableView() 13 } 14 15 private func configureTableView() { 16 17 self.tableView.dataSource = self 18 self.tableView.delegate = self 19 self.tableView.rowHeight = 150 20 } 21} 22 23extension ChartsMenuViewController:UITableViewDataSource { 24 25 //MARK: UITableView DataSource method 26 27 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 28 29 return self.viewModel.getChartsMenuComponentsCount() 30 } 31 32 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 33 34 let component = self.viewModel.getChartsMenuComponent(row: indexPath.row) 35 let cell = tableView.dequeueReusableCell(withIdentifier: "ChartsMenuCell", for: indexPath) as! ChartsMenuCell 36 cell.configure(component: component) 37 38 return cell 39 } 40} 41 42extension ChartsMenuViewController:UITableViewDelegate { 43 44 //MARK: UITableView Delegate method 45 46 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 47 48 tableView.deselectRow(at: indexPath, animated: true) 49 50 let component = self.viewModel.getChartsMenuComponent(row: indexPath.row) 51 switch component { 52 case .pie: 53 //ここでタブを残した状態で次画面に遷移したい 54 let storyboard = UIStoryboard(name: "Main", bundle: nil) 55 let pieVC = storyboard.instantiateViewController(withIdentifier: "pieVC") 56 self.tabBarController?.navigationController?.present(pieVC, animated: true, completion: nil) 57 58 //self.performSegue(withIdentifier: "PieChart", sender: nil) 59 case .bar: 60 self.performSegue(withIdentifier: "BarChart", sender: nil) 61 case .line: 62 self.performSegue(withIdentifier: "LineChat", sender: nil) 63 } 64 } 65}

画面構成

Main.storyboard
イメージ説明

試したこと

  • segueによる画面遷移 -> モーダル表示になってしまう
  • こちらを参考にした上記のコード -> 画面遷移しない

補足情報(FW/ツールのバージョンなど)

遷移先のViewContorollerのStoryboardIDはpieVCを指定してあります

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

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

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

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

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

guest

回答1

0

ベストアンサー

present()ではなく、push()ではダメでしょうか?
present()はモーダル表示をするための関数ですので、モーダルになってしまいますね。

投稿2019/08/01 15:20

k2moons

総合スコア184

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

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

pftyuk

2019/08/02 00:02

ご回答頂きありがとうございます。 present()はモーダル表示をするための関数なのですね・・・。 自分の調べが甘かったです。push()を使ったら期待する動作となりました。 具体的には self.tabBarController?.navigationController?.present(pieVC, animated: true, completion: nil)の行を self.navigationController?.pushViewController(pieVC, animated: true)に変更したら 期待している画面遷移の動作となりました。 ご回答頂きありがとうございました。 ベストアンサーとして閉じさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問