SwiftUIでリストの削除時にアラートを出す方法です。
こうして
こうするやつです
ポイント
-
onDelete
メソッドを使いますが、List
ではなくForEach
のメソッドなのでForEach
を使います。 -
alert
モディファイアを使いますが、isPresented
ではなく、item
を使います。(何こ目の要素かを取得するため) -
item
はIdentifiable
です。
import SwiftUI
struct ContentView: View {
@State var deleteAlert:Bool = false
@State var item: Item?
func showDeleteAlert(offsets: IndexSet) {
self.item = Item(id: String(offsets.first!))
}
struct Item: Identifiable {
var id:String
}
var body: some View {
List {
ForEach(0..<5, id: \.self) { id in
Text(String(id))
}
.onDelete(perform: showDeleteAlert)
.alert(item: self.$item) { i in
Alert(title: Text(i.id + "を削除しますか?"),
primaryButton: .destructive(Text("Delete")) {
// deleteの処理
},
secondaryButton: .cancel() {
}
)
}
}
}
}
参考
https://qiita.com/1amageek/items/e90e1cfb0ad497e8b27a
https://fuckingswiftui.com/#alert
https://www.hackingwithswift.com/books/ios-swiftui/using-alert-and-sheet-with-optionals