0

我正在构建一个警报应用程序,我只想在用户输入低于 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)

请帮我解决这个问题!!

4

1 回答 1

0

您可以使用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())为修饰符。ButtonImageaccentColor

针对评论进行更新:您想要做的一般检查是:

if myViewModel.myModel.waketime.timeIntervalSince1970 - Date().timeIntervalSince1970 < 60 * 60 * 2 {

但是,请注意,使用您当前仅显示小时和分钟的策略,这将在午夜前 2 小时开始失败,因为DatePicker它将默认为当前日期,例如,凌晨 1 点注册为当前日期之前/时间,而不是之后。因此,您需要添加一些额外的逻辑来解决此类问题。例如,您可以将 24 小时添加到当前日期之前的任何时间。

于 2021-03-10T06:27:18.400 回答