【问题标题】:How to set UNCalendarNotificationTrigger for workweek (Monday to Friday) in Swift?如何在 Swift 中为工作周(周一至周五)设置 UNCalendarNotificationTrigger?
【发布时间】:2020-04-22 17:42:52
【问题描述】:

使用iOS13.4、XCode11.4、Swift5.2,

您如何设置将在每个工作日(即周一至周五,而不是周六和周日)触发的本地通知??

我尝试了不同的日历组件设置,但没有成功解决工作日问题。

这是我到目前为止所做的......

如果警报需要在特定日期:

Calendar.current.dateComponents([.day, .month, .year, .hour, .minute, .second], from: notificationDate)

如果闹钟需要每天重复:

Calendar.current.dateComponents([.hour, .minute], from: notificationDate)

如果闹钟需要在特定工作日重复:

Calendar.current.dateComponents([.weekday, .hour, .minute], from: notificationDate)

等等

但是如何设置几个工作日(例如每个工作日周一到周五)??

这是我的代码,用于精确的 notificationDate 示例:

import UIKit

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let content = UNMutableNotificationContent()
        content.title = "My Notification Title"
        content.categoryIdentifier = UUID().uuidString
        var notificationIdentifier = "23224-23134-234234"
        var notificationDate = Date(timeInterval: 30, since: Date())
        let notificationTriggerKind = Calendar.current.dateComponents([.day, .month, .year, .hour, .minute, .second], from: notificationDate)
        let notificationTrigger = UNCalendarNotificationTrigger(dateMatching: notificationTriggerKind, repeats: false)
        let notificationRequest = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: notificationTrigger)
        let notificationCenter = UNUserNotificationCenter.current()
        notificationCenter.delegate = self
        notificationCenter.add(notificationRequest) {(error) in if let error = error { print("error: \(error)") } }
    }
}

extension MyViewController: UNUserNotificationCenterDelegate {

    // kicks in when App is running in Foreground (without user interaction)
    func userNotificationCenter(_ center: UNUserNotificationCenter,
            willPresent notification: UNNotification,
            withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

        // ...do your custom code...
        completionHandler([.alert, .sound])
    }

    // kicks in when App is running in Foreground or Background
    // (AND App is open) AND user interacts with notification
    func userNotificationCenter(_ center: UNUserNotificationCenter,
        didReceive response: UNNotificationResponse, withCompletionHandler
        completionHandler: @escaping () -> Void) {

        // ... do your custom code ....
        return completionHandler()
    }
}

【问题讨论】:

    标签: swift calendar viewcontroller uilocalnotification unnotificationrequest


    【解决方案1】:

    你做得很好。

    要做到这一点,您需要为每一天安排一个通知。

    检查这个例子:

    • 创建和扩展日期以获取特定日期的小时、分钟和秒
            extension Date {
            public func getDateComponents() -> DateComponents {
                   let dateComponents = Calendar.current.dateComponents([ .hour, .minute, .second], from: self)
    
                   return dateComponents
               }
        }
    
    • 或者直接创建一个日期组件:
        var dateComponents = DateComponents()
        dateComponents.hour = 9
        dateComponents.minutes = 10
        dateComponents.weekDay = 1
    
    • 然后检查从星期一 (2) 到星期五 (6) 的需要天数 并迭代一系列工作日以创建每天的特定通知并重复。
        let workDays = 2...6
                for day in workDays {
                    var dateComponents = date.getDateComponents()
                    dateComponents.weekday = day
    
                    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: repeats)
    
                    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
    
                    self.notificationCenter.add(request) { (error) in
                        if let error = error {
                        }
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多