💬

[SwiftUI] 一つのViewに複数のpopOverを表示する

2021/03/18に公開

ナビゲーションバーに設置したBarButtonからpopOverを表示させるサンプルです。
SwiftUIでは、複数の .popover を書くことができないため、switch文を使い表示させるサブビューを切り替えます。

struct AnimalView: View {
...

@State private var isPopOverPresented: Bool = false
@State private var popOverStyle = PopOverStyle.cat

private enum PopOverStyle {
	case cat
	case dog
}

...

var body: some View {
	...
	.toolbar {
		ToolbarItemGroup(placement: .navigationBarTrailing) {
			Button(action: {
				popOverStyle = .dog
				isPopOverPresented = true
				},
				label: {
					Text("Dog")
				}
			)
			Button(action: {
				popOverStyle = .cat
				isPopOverPresented = true
				},
				label: {
					Text("Cat")
				}
			)
		}
	}.popover(isPresented: $isPopOverPresented,
		attachmentAnchor: .point(.top),
		arrowEdge: .top) {
			switch popOverStyle {
			case .dog:
				DogView()
			case .cat:
				CatView()
			}
		}
	}
...
}

Discussion