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

(2020/11/03 更新)

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

スポンサーリンク

環境

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

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

概要

編集モードとはユーザーがコンテンツを編集できるかどうかを示すViewの状態です。

いくつかの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】編集モードの取得に関する不具合
編集モード(editMode)の取得に関する不具合と思われる現象に遭遇したので、対処方法と一緒に記録を残しておきます。
スポンサーリンク
SwiftUI
カピ通信