Swift UI 2.0:如何设置此通知?

Posted

技术标签:

【中文标题】Swift UI 2.0:如何设置此通知?【英文标题】:Swift UI 2.0: How can to set up this Notification? 【发布时间】:2020-12-12 14:38:28 【问题描述】:

首先,我从未在应用程序中使用过通知。我已经完成了教程,但整个过程让我感到困惑。

我创建了一个名为 Notify.swift 的 SwiftUI 文件。我希望用户能够设置通知时间,以提醒他们在指定时间执行任务,如下图所示:

您在图像中看到时间的地方,我创建了一个 DatePicker 来选择通知时间:

VStack 
    Button(action: ) 
        HStack 
             DatePicker("   Select a time ....", 
                 selection: $wakeup, displayedComponents: .hourAndMinute)
                 .font(.title2)
                 .accentColor(Color(.white))
        
    .background(Color(.black))

.frame(width: .infinity, height: 40, alignment: .center)
.padding()

当用户点击创建按钮设置通知时,它应该在特定时间设置通知(一直,除非更改)。这是我需要做的,但不知道该怎么做:

如果通知时间设置为上午 8:30,如图所示,并且用户选择 CREATE,则设置通知并应发送给用户以执行任何任务,其中可能包含指定的声音和消息时间。

我了解有不同类型的通知:本地、用户、Apple 推送等,但我不知道这属于哪种类型或如何进行。

这是通知还是警报?

【问题讨论】:

您可以使用本地通知,本地通知允许您设置触发通知的时间。 @Cod3rMax 您是否建议我可以查看任何教程来执行此特定通知以设置触发通知的时间? 请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。 【参考方案1】:

您可以为此使用本地通知。在这里,我为您制作了一个触发通知的功能。首先,检查该时间是否早于当前时间。然后通知将在明天,我们将一天添加到我们的日期。您可以随意更改标题、正文。

确保将您的 DatePicker 包裹在按钮之外,否则当您单击 DatePicker 时它总是会触发通知。

func scheduleNotification() -> Void 
    let content = UNMutableNotificationContent()
    content.title = "Your title"
    content.body = "Your body"
    
    var reminderDate = wakeup
    
    if reminderDate < Date() 
        if let addedValue = Calendar.current.date(byAdding: .day, value: 1, to: reminderDate) 
            reminderDate = addedValue
        
    

    let comps = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: reminderDate)
                           
    let trigger = UNCalendarNotificationTrigger(dateMatching: comps, repeats: false)
    
    let request = UNNotificationRequest(identifier: "alertNotificationUnique", content: content, trigger: trigger)

     UNUserNotificationCenter.current().add(request) (error) in
         if let error = error 
             print("Uh oh! We had an error: \(error)")
         
     

您还需要为这样的通知请求权限:

func requestPush() -> Void 
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound])  success, error in
        if success 
            print("All set!")
         else if let error = error 
            print(error.localizedDescription)
        
    

这里是你的按钮:

VStack 
    Button(action: 
        scheduleNotification()
    ) 
        Text("Save notification")
    
     DatePicker("Select a time ....",
         selection: $wakeup, displayedComponents: .hourAndMinute)
         .font(.title2)
         .accentColor(Color(.white))

【讨论】:

感谢@daviddev。当您说将 DatePicker 包裹在按钮之外时,我是否将其更改为您在上面显示的方式?而不是我拥有的那个?我的 DatePicker 在按钮内的 HStack() 中 - 我不再需要 HStack() 吗? 是的。目前在您的示例中,DatePicker 是 Button 内容的一部分。如果单击 DatePicker,按钮将触发操作。 您首先必须请求通知并且用户允许它。我添加了上面的代码 在调用 scheduleNotification() 之前.. 您可以在 onAppear() 或按钮内 让我们continue this discussion in chat。

以上是关于Swift UI 2.0:如何设置此通知?的主要内容,如果未能解决你的问题,请参考以下文章

UILocalNotifcation 未在 swift 2.0 中触发

如何在swift UI Test下检查应用程序状态

FacebookSDK(4.7) 自定义登录 UI 按钮 - Swift 2.0

如何在 Swift 中将任务发送到后台队列?

如何使用 UINavigationController (Swift 2.0 iOS 9) 强制设置横向方向

未使用 Apple 推送通知设置通知徽章计数 - swift - 以编程方式