【SwiftUI】Viewの編集モード(editMode)について

(2020/11/03 更新)

Viewの編集モードについて解説します。

スポンサーリンク

環境

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

【Xcode】12.1
【Swift】5.3
【iOS】14.1
【macOS】Catalina バージョン 10.15.7
スポンサーリンク

概要

編集モードとはユーザーがコンテンツを編集できるかどうかを示すViewの状態です。
環境プロパティ(editMode)にて値を保持しています。

いくつかのViewは編集モードに応じた編集機能を提供します。
例えば、ForEachビューで、onDelete()関数、onMove()関数が記述されている状態で、削除操作・移動操作が可能になります。
また、Listビューではselectionパラメータのあるイニシャライザで初期化された場合、ラジオボタンを表示して項目の選択が可能になります。

Viewの編集モードを切り替える専用ボタンとしてEditButtonがあります。

使用例

EditButtonで編集モードを切り替えて、リストの項目削除操作を有効にする例です。

使用例

スポンサーリンク

編集モードの実態

編集モードはEditMode列挙体で表され、以下の値とプロパティを持ちます。

意味
.active 編集可能
.inactive 編集不可
.transient 一時的な編集モード
(スワイプジェスチャ中などに設定される)


プロパティ 意味
isEditing 編集モードが編集可能(.active)か否かをBool値で返す

編集モードへのアクセス

環境プロパティeditModeを使って現在のViewの編集モード(EditMode)にアクセスします。

①editModeの取得

Environmentプロパティラッパーで、環境プロパティeditModeを取得します。
editModeの型はBinding?となっており、現在のViewに紐づくEditMode列挙体への参照値です。

②値の参照と設定

取得したeditModeからEditMode列挙体に直接アクセスするには、wrappedValueを使用します。

使用例

編集モードに直接アクセスしてオリジナルのEditButtonを作成した例です。

使用例2

スポンサーリンク

編集モードに応じた編集機能の作成

編集モードに応じてオリジナルの編集機能を作成する事も可能です。
以下は編集モードに応じてテキストの入力可否を変更する例です。

editMode変数へのアクセス

スポンサーリンク

あわせて読みたい記事

【SwiftUI】編集モードの取得に関する問題
(2022/02/06 更新) NavigationViewでの編集モード(editMode)取得に関する問題についてまとめました。