はじめに
SwiftUIのContextMenuは、ユーザーがViewを長押ししたときに表示されるメニューです。この記事では、その基本的な使い方と実装方法について解説します。
ContextMenuの基本
ContextMenuは、特定のViewに対して長押し操作を行うと表示されるメニューです。メニューに配置できる要素はButtonやPicker、Toggleなどを表示することができます。
import SwiftUI
struct ContextMenuSmp: View {
@State private var btnCnt = 0
@State private var picker = "A"
@State private var toggle = true
var body: some View {
VStack {
Text("長押しでコンテキストメニュー表示")
.padding()
.contextMenu {
Button {
btnCnt+=1
} label: {
Label("カウントボタン", systemImage: "heart")
}
Picker("A,B,C", selection: $picker) {
Text("A").tag("A")
Text("B").tag("B")
Text("C").tag("C")
}
Toggle("toggleの状態", isOn: $toggle)
}
HStack {
Text("\(btnCnt)")
Text("\(picker)")
Text("\(toggle.description)")
}
}
}
}
実装した動作の説明
- Text部分を長押しするとコンテキストメニューを開きます
- メニューには3つの要素を配置しています
・タップ回数をカウントするボタン
・ピッカーによる選択肢
・トグルによる真偽値 - 要素に対するアクションによる結果がテキストで表示されます
画像付きのコンテキストメニュー
previewを用いるとコンテキストメニューの上部に画像を表示することが出来ます。
import SwiftUI
struct ContextMenuSmp: View {
@State private var toggle = true
var body: some View {
Text("長押しでコンテキストメニュー表示")
.padding()
.contextMenu {
// ボタンでトグルの状態を変更する
Button {
toggle.toggle()
} label: {
Label("画像切り替え", systemImage: "rectangle.2.swap")
}
}
preview: {
// toggleの状態によって画像を切り替える
if toggle == true {
Image("28090841_s")
}
else {
Image("28262271_s")
}
}
}
}実装した動作の説明
- Text部分を長押しするとコンテキストメニューを開きます
- ボタンをタップすると表示する画像が切り替わります
まとめ
SwiftUIのContextMenuは、アプリケーションのユーザビリティを向上させるための重要なツールです。以下のように活用できます。

