[SwiftUI] toolbar の使い方

     

TAGS:

⌛️ 2 min.
SwiftUI に新しく導入された .toolbar modifier を説明します。
機能ボタン等の管理に役立ちます。

ボタン等のコントロールを個別に配置していると、その管理が大変になってきます。

複数のプラットフォームに対応しようとすると、個別の View を作ることになってしまいがちです。

SwiftUI2.0 からは、新しく toolbar という modifier が導入され、定義は同じ・表現はプラットフォーム依存 という書き方ができるようになっています。

順番に説明していきます。

toolbar modifier

名前の通り、ツールバー をコントロールするための modifier です。

Apple のドキュメントは、こちら

ToolbarItem/ToolbarItemGroup を複数持つことができる modifier です。

.toolbar を使用することで以下のように配置することができます。

.toolbar 例


struct ContentView: View {
    let messages: [String] = ["hello", "hi", "hallo"]

    var body: some View {
      List(messages, id: \.self) { message in
        Text(message)
      }
      .toolbar {
        ToolbarItem(placement: .bottomBar) {
          Button("New") {print("new")}
        }
        ToolbarItem(placement: .bottomBar) {
          Button("Delete") { print("delete")}
        }
      }
    }
}

Toolbar使用例

toolbar 使用例

ToolbarItem

.toolbar を使ってツールバー や、ナビゲーションバーに配置する要素を定義するものです。

Apple のドキュメントは、こちら

ToolbarItem を定義するときに、以下の2つの要素を指定する必要があります。

  • placement
  • content

placement 指定

どこに配置するかを指定するものです。

Semantic placement (意味的な配置場所) と positional placement (位置としての配置場所)の大きく2種類に分かれていて、以下のようなものを指定できます。

指定 semantic/positional iOS/iPadOS での配置箇所
.automatic NavigationBar の右端に追加されます
.principal semantic NavigationBar の中央に配置されます。NavigationView にタイトル指定されていても、こちらが優先されます
.navigation positional NavigationBar の左端に配置されます。back ボタンがあるケースでは、 .primaryAction の位置に配置されます
.primaryAction semantic NavigationBar の右端に配置されます
.status semantic bottom toolbar の中央に配置されます
.confirmationAction semantic(modal interface) .primaryAction の位置に配置されます
.cencellationactioen semantic(modal interface) NavigationBar の左端に配置されます
.destructiveAction semantic(modal interface) NavigationBar の右端に配置されます
.navigationBarLeading positional NavigationBar の左端に配置されます
.navigationBarTrailing positional NavigationBar の右端に配置されます
.bottomBar positional bottom bar に配置されます

semantic 的な意味については、Apple のドキュメント(こちら)を参照ください。

# 実際には、SwiftUI のコードを見るのがわかりやすかったです。

なお、NavigationBar と記載されている指定は、NavigationView 内で使われることが必要です。

content 指定

配置する要素を定義します。 Button 等の Control を配置することが多いと思います。

ToolbarItemGroup

様々な ToolbarItem を毎回定義して使用するのも大変です。

ToolbarItemGroup を使うことでまとめて、指定することができます。

ToolbarItemGroup 単位で、配置を指定します。

example code


struct ContentView: View {
    let messages: [String] = ["hello", "hi", "hallo"]

    var body: some View {
      List(messages, id: \.self) { message in
        Text(message)
      }
      .toolbar {
        ToolbarItemGroup(placement: .bottomBar) { // (1) ToolbarItemGroup 単位で配置指定
          Button("New") {print("new")}
          Button("Delete") { print("delete")}
        }
      }
    }
}

Toolbar使用例

toolbar (ToolbarItemGroup) 使用例
絵的には、先のものと同じです。

ToolbarContent

ToolbarContent という Protocol を使うことで、配置が同じもの以外にもまとめることができます。

Apple のドキュメントは、こちら

ToolbarContent 例


struct ContentView: View {
  let messages: [String] = ["hello", "hi", "hallo"]
  
  var body: some View {
    List(messages, id: \.self) { message in
      Text(message)
    }
    .toolbar {
      NewDeleteToolbar(new: {print("new")}, delete: {print("delete")})
    }
  }
}

struct NewDeleteToolbar: ToolbarContent {
  let new: () -> Void
  let delete: () -> Void
  
  var body: some ToolbarContent {
    ToolbarItem(placement: .bottomBar) { // (1) ToolbarItem ごとに配置指定可能
      Button("New", action: new)
    }
    
    ToolbarItem(placement: .bottomBar) { // (2) ToolbarItem ごとに配置指定可能
      Button("Delete", action: delete)
    }
  }
}

(1), (2) のように ToolbarItem 毎に配置指定が可能なため、配置先が異なる ToolbarItem でもまとめて管理することができます。

まとめ

toolbar を使ったコントロール等の表示には、以下がポイントとなります

toolbar を使うときのポイント
  • .toolbar を使って指定する
  • ToolbarItem を使うことで、1要素を定義できる
  • ToolbarItemGroup を使うことで、複数要素をまとめて定義できる
  • ToolbarContent protocol を使うことで、様々な ToolbarItem をまとめて定義できる

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

SwiftUI 学習におすすめの本

SwiftUI 徹底入門

SwiftUI は、グラフィカルなライブラリということもあり、文字だけのテキストよりは、画像が多く入れられた書籍を読むと理解が進みやすいです。

自分で購入した中でおすすめできるものとしては、以下のものです。

2019 年発表の SwiftUI 1.0 相当を対象にしているので、2020/2021 に追加された一部の機能は、説明されていません。

ですが、SwiftUI 入門書としては、非常によくできていますし、わかりやすいです。 この本で学習した後に、追加分を学習しても良いと思います。

SwiftUIViewsMastery

英語での説明になってしまいますが、以下の本もおすすめです。

1ページに、コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です