【SwiftUI】TabViewの基本的な使い方

先日、私にとって初のiOSアプリがリリースとなりましたので、開発に使った技術を細分化してアウトプットしていこうかなと思います。良かったらインストールしてみてください。

[わかりすと -勉強サポートアプリ-](https://apps.apple.com/jp/app/id1553876980)

# TabViewとは

複数の子ビューを切り替えることのできるビュー。


[公式リファレンス](https://developer.apple.com/documentation/swiftui/tabview)

# 実際の動作

<iframe width="560" height="315" src="https://www.youtube.com/embed/mIJWPkvh2Bk" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# コード

上の動画のソースコードになります。

```Swift:ContentView.swift
struct ContentView: View {
    var body: some View {
        TabView{
            FirstPage() //1枚目の子ビュー
                .tabItem {
                    Image(systemName: "1.circle.fill") //タブバーの①
                }
            SecondPage() //2枚目の子ビュー
                .tabItem {
                    Image(systemName: "2.circle.fill") //タブバーの②
                }
        }
    }
}

```

下はそれぞれ子ビューの中身です。

```Swift:FirstPage.swift
struct FirstPage: View {
    var body: some View {
        Text("1枚目")
            .font(.title)
            .foregroundColor(.green)
    }
}
```
```Swift:SecondPage.swift
struct SecondPage: View {
    var body: some View {
        Text("2枚目")
            .font(.title)
            .foregroundColor(.red)
    }
}
```

このように、TabViewの{}内に子となるビューを書くと、それらを切り替えてひとつずつ表示できるようになります。
上の例ではビューを2つにしましたが、3つ以上にも対応しており、iPhoneであれば5つまでならそのままタブバーに表示されます。
（iPadなら8つまでそのままタブバーに表示できます。）

![スクリーンショット 2021-02-22 23.37.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1130636/7653cd7f-30d9-76ad-168c-efa1a973e2b0.png)

6つ以上になるとタブバーの右側に「More」と書かれたボタンが自動的に作られ、5つ目以降のタブバーがすべて内包されます。

![スクリーンショット 2021-02-22 23.36.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1130636/45d1fc67-1912-fc1b-540f-454a270bdb1b.png)

# tabItemモディファイア

タブバーに表示するビューを指定できます。tabItemがなくてもタブバーは作られますが、何も書かれていないタブになりどこを押せばいいかわかりづらくなるため、基本はtabItemを付けるべきかと思います。

[公式リファレンス](https://developer.apple.com/documentation/swiftui/textfield/tabitem(_:))

tabItemの{}内にはImageとTextを指定して組み合わせることができ、VStackを使わなくても自動的に縦並びになります。

![スクリーンショット 2021-02-23 0.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1130636/ac5021cf-7637-eb41-5ca2-f6894487acbc.png)

タブバーの色はデフォルトが青となっていますが、TabViewのaccentColorを指定することにより、色の変更が可能です。

```Swift:ContentView.swift
struct ContentView: View {
    var body: some View {
        TabView{
            Text("1")
                .tabItem {
                    Image(systemName: "message.fill")
                    Text("メッセージ")
                }
            Text("2")
                .tabItem {
                    Image(systemName: "magnifyingglass")
                    Text("さがす")
                }
            Text("3")
                .tabItem {
                    Image(systemName: "face.smiling.fill")
                    Text("スタンプ")
                }
        }
        .accentColor(.green) //ここで色の指定
    }
}

```

![スクリーンショット 2021-02-23 0.18.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1130636/b95ef27a-820f-959a-baf9-a547f316876d.png)

# まとめ
TabViewはTwitterやLINEなど多くのアプリで見かけるような画面切り替えを可能にするビューです。ぜひ使いこなしてかっこいいアプリを作りましょう。

# 参考文献

- [SwiftUI徹底入門　金田浩明(著)](https://www.amazon.co.jp/SwiftUI-%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-%E9%87%91%E7%94%B0-%E6%B5%A9%E6%98%8E/dp/4815604061/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=SwiftUI+%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80&qid=1614007741&sr=8-1)
(【注意】Xcode12非対応のものです)