SwiftUIでModalをコードで閉じる方法
SwiftUIで表示したModalをボタンをタップしたイベントなどからコードで閉じる方法を説明します。
struct ContentView : View {
@State var isDetailPresented: Bool = false
var body: some View {
Button(action: {
self.isDetailPresented.toggle()
}) {
Text("Show detail")
.presentation(
isDetailPresented ? Modal(DetailView().environment(\.isPresented, $isDetailPresented)) : nil
)
}
}
}
struct DetailView: View {
@Environment(\.isPresented) var isPresented
var body: some View {
Button(action: {
self.isPresented?.value.toggle()
}) {
Text("Dismiss")
}
}
}
UIとしては、ContentViewにあるShow DetailボタンをタップしたらDetailViewをModalで表示します。DetailViewのDismissボタンをタップするとModalが閉じます。
ContentViewにisDetailPresentedという状態を持たせます。isDetailPresentedがtrueの時にModalを作成してpresentationメソッドで表示しています。その時environmentメソッドで、DetailViewで@Environmentとして宣言したisPresentedに$isDetailPresentedを代入しています。$isDetailPresentedとはBinding<Bool>です。
DetailViewではDismissボタンをタップするとisPresentedをfalseに変更します。そうするとContentViewのisDetailPresentedがfalseになるのでpresentationにnilが渡されて、Modalが閉じます。
この記事が気に入ったらサポートをしてみませんか?