如何解决在按钮 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。