在按钮 swiftUI 中配置 2 警报消息
config 2 alerts messages in button swiftUI
我要学习 swift 和 swiftUI。
我申请按类别组织笔记。如果你需要,你可以在我的 GitHub 中找到我的项目。 https://github.com/yoan8306/List-Notes
我有问题。我觉得很简单。我想发出 2 条警报消息。第一个是保存成功的时候,第二个是当他们遇到问题时,比如一个字段为空或类别为空。
private func checkNoteIsOk() -> Bool{
if !noteTitleField.isEmpty && !noteField.isEmpty && categorySelected != nil {
return true
} else {
return false
}
}
.
Button(action: {
guard checkNoteIsOk() else {
presentAlert = true
return
}
coreDM.saveNote(noteData: noteField, noteTitle: noteTitleField,
noteDate: Date(), noteCategory: categorySelected!)
emptyField()
saveSuccess = true
},
label: {
Text("Save")
}
)
}
//end Vstak
.navigationTitle("Create new note")
.alert(isPresented: $presentAlert) {
Alert(title: Text("Error !"), message: Text("Not saved"),
dismissButton: .default(Text("OK"))) }
.alert(isPresented: $saveSuccess) {
Alert(title: Text("Success !"), message: Text("Insert with success !"),
dismissButton: .default(Text("OK"))) }
我认为这是因为它们是两条警报消息。并且只能显示最后一条消息警报。感谢您的回答和帮助。
对于单个视图中的多个警报,您可以使用枚举。
首先,您需要像这样创建一个枚举并定义所有警报消息
enum AlertType: Identifiable {
var id: UUID {
return UUID()
}
case success
case error
var title: String {
switch self {
case .success:
return "Success !"
case .error:
return "Error !"
}
}
var message: String {
switch self {
case .success:
return "Insert with success !"
case .error:
return "This category already exist !!"
}
}
}
现在在视图中创建一个状态变量。
struct NewCategoryView: View {
@State private var alertType: AlertType?
// Other code
}
并在末尾添加警报
//end Vstak
.navigationTitle("New Category")
.onAppear(perform: { updateCategoryList()} )
.alert(item: self.$alertType, content: { (type) -> Alert in
Alert(title: Text(type.title), message: Text(type.message),
dismissButton: .default(Text("OK")))
})
现在通过分配值来显示警报。像这样
if condition_true {
alertType = AlertType.success //<-- Here
} else {
alertType = AlertType.error //<-- Here
}
虽然 [Raja] 的回答有效。我不认为这是理想的,因为
- 它会生成随机 UUID,Apple 在不需要时不鼓励这样做。
- 它确实需要多个 switch 语句,而只需要一个。
一个更简单的解决方案可能是像这样定义枚举
enum ResultAlert: Int8, Identifiable {
case success, error
var id: some Hashable { rawValue }
var content: Alert {
switch self {
case .success: return Alert(title: Text("Success!"))
case .error: return Alert(title: Text("Oy, error..."))
}
}
}
那就和Raja的回答一样:
将其作为 @State 变量添加到您的视图中
@State var resultAlert: ResultAlert?
使用 resultAlert = .success
或 resultAlert = .error
激活它。使用 resultAlert = .none
停用它
然后这样呈现:
.alert(item: $resultAlert, content: \.content)
我要学习 swift 和 swiftUI。 我申请按类别组织笔记。如果你需要,你可以在我的 GitHub 中找到我的项目。 https://github.com/yoan8306/List-Notes 我有问题。我觉得很简单。我想发出 2 条警报消息。第一个是保存成功的时候,第二个是当他们遇到问题时,比如一个字段为空或类别为空。
private func checkNoteIsOk() -> Bool{
if !noteTitleField.isEmpty && !noteField.isEmpty && categorySelected != nil {
return true
} else {
return false
}
}
.
Button(action: {
guard checkNoteIsOk() else {
presentAlert = true
return
}
coreDM.saveNote(noteData: noteField, noteTitle: noteTitleField,
noteDate: Date(), noteCategory: categorySelected!)
emptyField()
saveSuccess = true
},
label: {
Text("Save")
}
)
}
//end Vstak
.navigationTitle("Create new note")
.alert(isPresented: $presentAlert) {
Alert(title: Text("Error !"), message: Text("Not saved"),
dismissButton: .default(Text("OK"))) }
.alert(isPresented: $saveSuccess) {
Alert(title: Text("Success !"), message: Text("Insert with success !"),
dismissButton: .default(Text("OK"))) }
我认为这是因为它们是两条警报消息。并且只能显示最后一条消息警报。感谢您的回答和帮助。
对于单个视图中的多个警报,您可以使用枚举。
首先,您需要像这样创建一个枚举并定义所有警报消息
enum AlertType: Identifiable {
var id: UUID {
return UUID()
}
case success
case error
var title: String {
switch self {
case .success:
return "Success !"
case .error:
return "Error !"
}
}
var message: String {
switch self {
case .success:
return "Insert with success !"
case .error:
return "This category already exist !!"
}
}
}
现在在视图中创建一个状态变量。
struct NewCategoryView: View {
@State private var alertType: AlertType?
// Other code
}
并在末尾添加警报
//end Vstak
.navigationTitle("New Category")
.onAppear(perform: { updateCategoryList()} )
.alert(item: self.$alertType, content: { (type) -> Alert in
Alert(title: Text(type.title), message: Text(type.message),
dismissButton: .default(Text("OK")))
})
现在通过分配值来显示警报。像这样
if condition_true {
alertType = AlertType.success //<-- Here
} else {
alertType = AlertType.error //<-- Here
}
虽然 [Raja] 的回答有效。我不认为这是理想的,因为
- 它会生成随机 UUID,Apple 在不需要时不鼓励这样做。
- 它确实需要多个 switch 语句,而只需要一个。
一个更简单的解决方案可能是像这样定义枚举
enum ResultAlert: Int8, Identifiable {
case success, error
var id: some Hashable { rawValue }
var content: Alert {
switch self {
case .success: return Alert(title: Text("Success!"))
case .error: return Alert(title: Text("Oy, error..."))
}
}
}
那就和Raja的回答一样:
将其作为 @State 变量添加到您的视图中
@State var resultAlert: ResultAlert?
使用 resultAlert = .success
或 resultAlert = .error
激活它。使用 resultAlert = .none
然后这样呈现:
.alert(item: $resultAlert, content: \.content)