我正在设置一些本地通知作为提醒 . 到目前为止,我已经能够设置一个非重复通知,该通知从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 回答
如果设置了一个
UNCalendarNotificatonTrigger
,当设置repeats = true
你不能操纵它的重复间隔,因为它会在每个日期被重复时触发的日期组件匹配 . 给你举个例子,如果你只设置了hour, minute and second
组件,您的通知将被每天重复,因为准确的小时,分钟和秒值出现的每一天 . 如果您只设置minute and second
,通知将每小时重复一次 .您正在寻找的是
UNTimeIntervalNotificationTrigger
,这是您可以使用它设置重复间隔的那个 .但是,要符合您的条件,您需要混合两个触发器 . 你应该先 Build 一个非重复
UNCalendarNotificationTrigger
,一旦该通知交付,设置了来自用户的时间间隔重复UNTimeIntervalNotificationTrigger
. 见UNTimeIntervalNotificationTrigger