はじめに
Listの行を並び替える実装について記事に残します。
開発環境
- macOS Big Sur 11.2.3
- Xcode 12.4
- Swift 5.3.2
イメージ
実装
NavigationViewにEditButtonを追加し、"onMove(perform:)"を使うと行を並び替えることができるようになる。
参考:
https://developer.apple.com/documentation/swiftui/dynamicviewcontent/onmove(perform:)
ContentView.swift
import SwiftUI struct ContentView: View { @State private var regions = ["北海道", "東北", "関東", "中部", "近畿", "中国", "四国", "九州"] var body: some View { NavigationView { List { ForEach(regions, id: \.self) { region in Text(region) } .onMove { indexSet, toOffset in regions.move(fromOffsets: indexSet, toOffset: toOffset) } } .listStyle(InsetGroupedListStyle()) .navigationTitle("地方") .navigationBarTitleDisplayMode(.inline) .toolbar { EditButton() } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
おわりに
sheetでListを表示した状態で行を編集しようとしたらエラーが発生したので、発生した時の具体的な状況と解決方法は別途記事に残そうと思います笑
参考
- https://developer.apple.com/documentation/swiftui/list
-
https://developer.apple.com/documentation/swiftui/dynamicviewcontent/onmove(perform:)
-
https://developer.apple.com/documentation/swiftui/navigationview
-
https://developer.apple.com/documentation/swiftui/editbutton
-
How to let users move rows in a list - a free SwiftUI by Example tutorial