问题描述
我正在构建一个类似闹钟的应用程序,我只想在用户输入时间低于 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"))
}
}
}
如果您不希望 .buttonStyle(PlainButtonStyle())
将您的项目中的 Button
更改为 Image
,您可能需要将 accentColor
添加为 if myViewModel.myModel.waketime.timeIntervalSince1970 - Date().timeIntervalSince1970 < 60 * 60 * 2 {
的修饰符。
根据评论更新: 您要做的一般检查是:
DatePicker
但是,请注意,根据您当前仅显示小时和分钟的策略,这将在午夜前 2 小时开始失败,因为 static const? _kFontPkg = null;
将默认为当前日期,例如,凌晨 1 点,注册为 before 当前日期/时间,而不是之后。因此,您需要添加一些额外的逻辑来解决此类问题。例如,您可以在当前日期之前的任何时间添加 24 小时。