当用户输入的时间低于预期时间时,如何在 swiftUI 中显示警报消息?
How to show alert message in swiftUI when user enters time below the expected time?
我正在构建一个类似闹钟的应用程序,我只想在用户输入的时间低于 2 小时时显示一条弹出消息(警报消息),用户应该通过这样的方式收到一条消息:“请输入更多时间持续时间超过 2 小时。
这是我存储报警值的地方
myViewModel.myModel.waketime
我想在用户单击下面的图片时显示消息
Image(systemName: "checkmark.circle")
.resizable()
.aspectRatio(contentMode: .fit)
.clipShape(Circle())
.sheet(isPresented: $showPlayer) {
SecondView()
}
这是用户选择闹钟时间的另一个视图
Text("Alarm : ")
.font(.body)
Spacer()
DatePicker("", selection: self.$myViewModel.myModel.waketime, displayedComponents: .hourAndMinute)
请帮我解决这个问题!!
您可以使用 Alert
向用户显示提醒。为了在用户单击 Image
时执行此操作,您可能希望将其包装在 Button
:
中
struct ContentView : View {
@State var alertShown = false
var body: some View {
Button(action: {
if true { //here, you can check your condition for whether the alert should get triggered -- like checking `myViewModel.myModel.waketime > x`
alertShown = true
}
}) {
Image(systemName: "checkmark.circle")
.resizable()
.aspectRatio(contentMode: .fit)
.clipShape(Circle())
}.alert(isPresented: $alertShown) {
Alert(title: Text("Please enter time more than 2 hours of duration"))
}
}
}
如果您不希望将项目中的 Image
更改为 accentColor
,您可能需要添加 .buttonStyle(PlainButtonStyle())
作为 Button
的修饰符.
更新回复评论:
您想要做的一般检查是:
if myViewModel.myModel.waketime.timeIntervalSince1970 - Date().timeIntervalSince1970 < 60 * 60 * 2 {
但是,请注意,根据您当前仅显示小时和分钟的策略,这将在午夜前 2 小时开始失败,因为 DatePicker
将默认为当前日期,即凌晨 1 点,例如,注册为 before 当前 date/time,而不是之后。因此,您需要添加一些额外的逻辑来解决此类问题。例如,您可以在当前日期之前的任何时间添加 24 小时。
我正在构建一个类似闹钟的应用程序,我只想在用户输入的时间低于 2 小时时显示一条弹出消息(警报消息),用户应该通过这样的方式收到一条消息:“请输入更多时间持续时间超过 2 小时。
这是我存储报警值的地方
myViewModel.myModel.waketime
我想在用户单击下面的图片时显示消息
Image(systemName: "checkmark.circle")
.resizable()
.aspectRatio(contentMode: .fit)
.clipShape(Circle())
.sheet(isPresented: $showPlayer) {
SecondView()
}
这是用户选择闹钟时间的另一个视图
Text("Alarm : ")
.font(.body)
Spacer()
DatePicker("", selection: self.$myViewModel.myModel.waketime, displayedComponents: .hourAndMinute)
请帮我解决这个问题!!
您可以使用 Alert
向用户显示提醒。为了在用户单击 Image
时执行此操作,您可能希望将其包装在 Button
:
struct ContentView : View {
@State var alertShown = false
var body: some View {
Button(action: {
if true { //here, you can check your condition for whether the alert should get triggered -- like checking `myViewModel.myModel.waketime > x`
alertShown = true
}
}) {
Image(systemName: "checkmark.circle")
.resizable()
.aspectRatio(contentMode: .fit)
.clipShape(Circle())
}.alert(isPresented: $alertShown) {
Alert(title: Text("Please enter time more than 2 hours of duration"))
}
}
}
如果您不希望将项目中的 Image
更改为 accentColor
,您可能需要添加 .buttonStyle(PlainButtonStyle())
作为 Button
的修饰符.
更新回复评论: 您想要做的一般检查是:
if myViewModel.myModel.waketime.timeIntervalSince1970 - Date().timeIntervalSince1970 < 60 * 60 * 2 {
但是,请注意,根据您当前仅显示小时和分钟的策略,这将在午夜前 2 小时开始失败,因为 DatePicker
将默认为当前日期,即凌晨 1 点,例如,注册为 before 当前 date/time,而不是之后。因此,您需要添加一些额外的逻辑来解决此类问题。例如,您可以在当前日期之前的任何时间添加 24 小时。