我正在设置一些本地通知作为提醒。 到目前为止,我已经能够设置一个非重复通知,该通知从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声明是否正确? (在我看来有点偏,似乎并不是真正的正确方法) 感谢。
答案 0 :(得分:1)
如果设置UNCalendarNotificatonTrigger
,则在设置repeats = true
时无法操纵其重复间隔,因为在触发器的日期组件匹配时,它将在每个日期重复。举个例子,如果您只设置hour, minute and second
组件,则会每天重复您的通知,因为每天都会出现确切的小时,分钟和秒值。如果您只设置minute and second
,通知将每小时重复一次。
您正在寻找的是UNTimeIntervalNotificationTrigger
,您可以使用它来设置重复间隔。
但是,要符合您的条件,您需要混合两个触发器。您应首先设置一个非重复UNCalendarNotificationTrigger
,一旦发出通知,请设置一个重复UNTimeIntervalNotificationTrigger
,其中包含来自用户的时间间隔。见UNTimeIntervalNotificationTrigger