

xcode8.3です  
[![ストリートボード](https://i.stack.imgur.com/Fwxqn.png)](https://i.stack.imgur.com/Fwxqn.png)

Storyboardの構成は上記のようになっています。  
タブ1の画面1からボタンをクリックし、画面1-2に遷移します。

[code]

    @IBAction func btnNext_click(_ sender: Any) {
            let next = storyboard!.instantiateViewController(withIdentifier: "SecondView")
            self.present(next,animated: true, completion: nil)
    }
    
[/code]

で、そのあと画面1-2からまたボタンをクリックし、画面1に遷移すると、タブバーが消えてしまいます。

[code]

    @IBAction func btnNext_click(_ sender: Any) {
            let next = storyboard!.instantiateViewController(withIdentifier: "FirstView")
            self.present(next,animated: true, completion: nil)
    }
    
[/code]

ボタンをクリックして戻った場合でも、元のタブバーを表示するにはどのようにしたらよいのでしょうか。


CC BY-SA 3.0
2017-08-17T08:52:42.203
37276
2018-05-29T02:52:15.927
2018-02-22T06:07:02.313
13022
9987
question
swift ios swift3
TabBarが消えてしまいます


あなたが「タブ1の画面1からボタンをクリックし、画面1-2に遷移」するためのコードと、「画面1-2からまたボタンをクリックし、画面1に遷移する」とがほぼ全く同じなのはご自分でもお分かりかと思います。

「画面1-2」には、タブバーは表示されていないはずです。全く同じコードを使えば、(新たな)「画面1」にもタブバーが表示されないと言うのはある意味当たり前だと思いませんか?

「ボタンをクリックして戻った場合」と言う記載がありますが、あなたの「画面1-2から〜」のコードは「画面1と同じデザインの新画面を作成し、その新画面に遷移する」ためのコードであって、元の画面に戻るためのコードにはなっていません。

(`instantiate...`と言うのは「新しい画面を作るのだ」と言う意識を持って読めるようにならないと、これからも色々つまづくことになるでしょう。)

`present(_:animated:completion:)`で表示された画面から元の画面に戻るには、`dismiss(animated:completion:)`メソッドを使用します。

画面1-2用のViewController側の`btnNext_click(_:)`メソッド(「戻る」ためのボタン・メソッドにNextとつくのもどうかと思うのでリネームした方が良いですが、storyboardでコネクションを貼ったメソッド名を書き換えると色々不都合も起きうるので、とりあえずそのままにしておきます)を以下のように書き換えて見てください。

[code]

    @IBAction func btnNext_click(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }
    
[/code]

* * *

なお、どうせstoryboardを使うのであれば、次画面への遷移にはsegueを、元画面に戻るにはunwind
segueの使用を検討された方が良いでしょう。私的にはunwind segueの方は、かなり使い方は面倒と言っても良いのですが、「unwind
segueの使い方」で検索すれば、日本語の良記事が見つかります。


CC BY-SA 3.0
2017-08-17T09:52:37.513
37279
2017-08-17T09:52:37.513
13972
37276
answer