我想洗掉串列項,當我洗掉串列項時,它會顯示確認對話框,如.alert對話框。我有下面的代碼,如果我想洗掉串列項.alert對話框是有效的,但是如果我嘗試洗掉所有串列項,.alert對話框不起作用,并且我無法洗掉所有專案,我不知道我錯過了什么?我想很可能是因為我有兩個.alert對話而且它們是沖突的,知道嗎?
struct CustomView: View {
@State private var selectedUsers: CustomModel?
@State var users: [CustomModel]
@State private var selectDelete = false
@State private var selectAllDelete = false
var body: some View {
ScrollView(.vertical, showsIndicators: false, content: {
VStack(content: {
ForEach(users){ user in
CustomRowView(user: user)
.contextMenu {
Button(action: {
selectDelete = true
}) {
Text("remove")
}
Button(action: {
selectAllDelete = true
}) {
Text("remove all")
}
}
.alert(isPresented: $selectDelete) {
Alert(title: Text("title"),
message: Text("message"),
primaryButton: .destructive(Text("Delete")) {
self.delete(item: data)
},
secondaryButton: .cancel()
)
}
.alert(isPresented: $selectAllDelete) {
Alert(title: Text("title"),
message: Text("message"),
primaryButton: .destructive(Text("Delete")) {
self.datas.removeAll()
},
secondaryButton: .cancel()
)
}
.onDelete { (indexSet) in
self.users.remove(atOffsets: indexSet)
}
}
})
})
}
private func delete(item user: CustomModel) {
if let index = users.firstIndex(where: { $0.id == user.id }) {
users.remove(at: index)
}
}
}
模型:
struct CustomModel: Identifiable{
var id = UUID().uuidString
var name: String
}
var users = [
CustomModel(name: "david"),
CustomModel(name: "marry"),
CustomModel(name: "henry"),
CustomModel(name: "nadi"), ]
uj5u.com熱心網友回復:
您可以創建警報型別并使用 switch 陳述句對其進行處理。
enum AlertType {
case selectDelete
case selectAllDelete
}
private var alertType: AlertType?
@State private var isAlertPresented = false
...
Button(action: {
alertType = .selectDelete
isAlertPresented = true
}) {
Text("remove all")
}
...
.alert(isPresented: $isAlertPresented) {
presentAlert()
}
...
func presentAlert() -> Alert {
switch alertType {
case .selectDelete:
return Alert(title: Text("title"),
message: Text("message"),
primaryButton: .destructive(Text("Delete")) {
self.delete(item: data)
},
secondaryButton: .cancel())
case .selectAllDelete:
return Alert(title: Text("title"),
message: Text("message"),
primaryButton: .destructive(Text("Delete")) {
self.datas.removeAll()
},
secondaryButton: .cancel())
default:
return Alert(title: Text(""))
}
}
uj5u.com熱心網友回復:
如果您將修改器應用于每個Button,它將起作用。此外,您可能會發現確認對話框更適合此任務。
將您的按鈕移動到自定義視圖中也會有所幫助,因為主體有 10 個視圖限制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/436441.html
