Listメモ

Listで選択された要素の取得

List(_:selection:) + Identifiable.ID を使う

モデル

View

選択された「実体」を取得

複数選択の場合

実体取得

「クリック時に即処理したい」場合

onChange を使う

選択された要素の削除の例

複数選択にする例

複数選択を有効にするには、List.selectionDisabled(false)を追加するだけでは不十分です。以下の修正が必要です:

修正箇所

重要なポイント

  1. @Binding var selected_item: Set<ScreenshotItem.ID>
  2. macOSでは自動的に複数選択が有効
  3. ScreenshotItemIdentifiableに準拠している必要がある

親ビューでの使い方

選択状態の確認

これでCommandキーやShiftキーを使った複数選択ができるようになります!試してみてください。

.onMove()でインデックスを取得する

SwiftUIのList.onMove(perform:)を使用する際、移動前(ドラッグ開始時)のインデックスは、クロージャの引数であるIndexSetから取得できます。

具体的には、IndexSetfirstプロパティを使って取得するのが最も簡単です。 [1]

実装方法

onMoveの第1引数(通常sourceまたはindicesと名付けられます)が、移動された要素のインデックスセットです。

ポイント

  • IndexSetから取得onMove(perform: { source, destination in ... }) の source は IndexSet 型です。
  • source.first: 通常、単一のアイテム移動であれば source.first で移動前のインデックス(0から始まるInt)を取得できます。
  • 移動の実行items.move(fromOffsets:toOffset:) メソッドを使用して、配列内のデータを実際に移動させます。

コメント

タイトルとURLをコピーしました