首页 文章

本地通知使用日历触发器重复间隔

提问于
浏览
1

我正在设置一些本地通知作为提醒 . 到目前为止,我已经能够设置一个非重复通知,该通知从datePicker中选择的日期触发 .

let dateformatter = DateFormatter()
    dateformatter.dateStyle = DateFormatter.Style.medium
    dateformatter.timeStyle = DateFormatter.Style.short
    let dateFromString = dateformatter.date(from: selectDateTextField.text!)
    let fireDateOfNotification: Date = dateFromString!

    //if permission allowed
    let content = UNMutableNotificationContent()
    content.title = notifTitleTextField.text!
    content.body = notifNoteTextView.text
    content.sound = UNNotificationSound.default()

    let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: fireDateOfNotification)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate,
                                                repeats: false)
    //Schedule the Notification
    let titleNospace = notifTitleTextField.text?.replacingOccurrences(of: " ", with: "")
    let identifier = titleNospace
    let request = UNNotificationRequest(identifier: identifier!, content: content, trigger: trigger)
    self.center.add(request, withCompletionHandler: { (error) in
        if let error = error {
            print(error.localizedDescription)
        }
    })

现在我希望用户从列表(或选择器)中选择重复间隔(每小时,每天,每周,每月,每年或每x天) . 有没有一种简单的方法可以这样做,或者我需要创建一个自定义类?通过一系列if else声明是否正确? (在我看来有点偏,似乎不是正确的方式)谢谢 .

1 回答

  • 1

    如果设置了一个 UNCalendarNotificatonTrigger ,当设置 repeats = true 你不能操纵它的重复间隔,因为它会在每个日期被重复时触发的日期组件匹配 . 给你举个例子,如果你只设置了 hour, minute and second 组件,您的通知将被每天重复,因为准确的小时,分钟和秒值出现的每一天 . 如果您只设置 minute and second ,通知将每小时重复一次 .

    您正在寻找的是 UNTimeIntervalNotificationTrigger ,这是您可以使用它设置重复间隔的那个 .

    但是,要符合您的条件,您需要混合两个触发器 . 你应该先 Build 一个非重复 UNCalendarNotificationTrigger ,一旦该通知交付,设置了来自用户的时间间隔重复 UNTimeIntervalNotificationTrigger . 见UNTimeIntervalNotificationTrigger

相关问题