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

Posted

技术标签:

【中文标题】当用户输入的时间低于预期时间时,如何在 swiftUI 中显示警报消息?【英文标题】:How to show alert message in swiftUI when user enters time below the expected time? 【发布时间】:2021-03-10 06:05:41 【问题描述】:

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

请帮我解决这个问题!

【问题讨论】:

【参考方案1】:

您可以使用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

响应 cmets 的更新: 您要做的一般检查是:

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

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

【讨论】:

但是它将如何检查我的时间?它应该从“myViewModel.myModel.waketime”中检索时间并检查时间是少于还是多于 2 小时。示例(如果用户将时间设置为下午 2:00,而现在时间是下午 1:00,则应给出消息并提示用户输入时长超过 2 小时) 看看我给出的代码——有一条注释告诉你在哪里进行检查。您没有提供有关waketime 的格式/时间的任何详细信息,因此除非您提供更多详细信息,否则我无法为您提供确切的代码。 感谢您的回复。你能检查我编辑的问题吗? 更新了我的回复

以上是关于当用户输入的时间低于预期时间时,如何在 swiftUI 中显示警报消息?的主要内容,如果未能解决你的问题,请参考以下文章

当用户输入超过预期的参数时,强制 VBA 中的 UDF 显示 MsgBox?

PCA 分析中的纯度分数低于预期

如何在 Swift 中触摸 UILabel 时对其进行编辑?

如何使用 Swift 在文本字段(从右到左)上输入货币格式?

如何使用 Swift 在文本字段(从右到左)上输入货币格式?

Swift:如何防止未显示的 UITableViewCells 在滚动时被关闭