当用户输入的时间低于预期时间时,如何在 swiftUI 中显示警报消息?

问题描述

我正在构建一个类似闹钟的应用程序,我只想在用户输入时间低于 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 小时。