【SwiftUI】画面を閉じるdismissとisPresentedについて

画面を閉じる為に使うdismissとisPresentedについて解説します。
どちらも環境変数(EnvironmentValues)で定義されており、@Environmentプロパティラッパーで取得します。
iOS14以前で同様の機能を実現していたpresentationModeについては、こちらの記事を参照してください。

(アーカイブ)【SwiftUI】環境変数presentationModeについて
本記事で使用しているPresentationModeはiOS15以降では非推奨となっています。 最新の情報はこちらの記事を御覧ください。 環境変数presentationModeについて解説します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】13.0
【Swift】5.5
【iOS】15.0
【macOS】Big Sur バージョン 11.6
スポンサーリンク

概要

環境変数dismissは、現在の画面を閉じるために使用するハンドラーを提供します。
isPresentedは、現在の画面が他の画面から呼びだされたのか否かをBool値で示します。
現在の画面が他から呼び出されたものでない場合にdismissを使っても効果はありません。

使用時の注意点

dismissとisPresentedはiOS15以降でのみ使用可能な環境変数です。
Xcode13.0で新規作成したプロジェクトはターゲットOSがiOS14.0の為、そのまま使用しようとすると次のようなエラーが出ます。

以下の画面でターゲットOSをiOS15以降に変更してください。
UntitledImage

スポンサーリンク

使用方法

環境変数 isPresented を参照し、他のViewから呼ばれていない(TopView)の場合は、次の画面へのリンクを表示。呼び出された画面では、dismissハンドラーを使って画面を閉じる処理を実装しています。
NavigationLinkで呼ばれた場合とSheetで呼ばれた場合のいずれも機能します。

UntitledImage

スポンサーリンク

あわせて読みたい記事

(アーカイブ)【SwiftUI】NavigationViewでの画面遷移
(2020/11/8 更新) 本記事で使用しているNavigationViewはiOS16以降では非推奨となっています。 最新の情報はこちらの記事を御覧ください。 NavigationView配下での画面遷移について解説します。
【SwiftUI】シートの使い方(sheet)
(2021/10/10 更新) Viewをモーダル表示にするシート(sheet)の使い方を解説します。 完全な全画面表示ではなく、元の画面の上にカードをのせたようなイメージで、遷移元の画面が少し見えるのがシートの特徴です。 画面全体を覆うモ...