Swift 本地通知使用日历触发器重复间隔
我正在设置一些本地通知作为提醒。 到目前为止,我已经能够设置一个非重复通知,它从从日期选择器中选择的日期触发Swift 本地通知使用日历触发器重复间隔,swift,uilocalnotification,usernotifications,Swift,Uilocalnotification,Usernotifications,我正在设置一些本地通知作为提醒。 到目前为止,我已经能够设置一个非重复通知,它从从日期选择器中选择的日期触发 let dateformatter = DateFormatter() dateformatter.dateStyle = DateFormatter.Style.medium dateformatter.timeStyle = DateFormatter.Style.short let dateFromString = dateformatter.date(fr
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语句来表达是否正确?(我觉得有点不对劲,这似乎不是正确的方法)
谢谢。如果您设置了一个
uncalendarnotificationtotrigger
,则在设置repeats=true
时,您无法操纵其重复间隔,因为当触发器的日期组件匹配时,它将在每个日期重复。举个例子,如果您只设置了小时、分钟和秒组件,您的通知将每天重复,因为每天都会出现精确的小时、分钟和秒值。如果只设置分钟和秒
,则通知将每小时重复一次
您要查找的是直到IntervalNotificationTrigger
,这是一个可用于设置重复间隔的触发器
但是,为了符合您的条件,您需要混合使用这两种触发器。您应该首先设置一个非重复的UNCalendarNotificationTrigger
,并在发送通知后,设置一个重复的UNTimeIntervalNotificationTrigger
,时间间隔来自用户。请参见我建议您在尝试实施此操作之前先阅读@不,谢谢,但我不需要推送通知。。。我试图做的只是让用户设置一个提醒(例如清洁游泳池过滤器)并设置一个重复间隔(例如每个月)。本地通知非常适合这种情况。所有信息都由用户设置谢谢您的回答。所以基本上我应该使用这个UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler:{deliveredNotifications->()在此处和此处设置UNTimeIntervalNotificationTrigger?但是,如果在计划通知后但在发送通知后不设置特定标识符,我如何才能设置它?是的,如果您希望访问用户未打开的通知,请使用该方法。您可以将任意数据存储在未通知内容的用户信息中属性,因此您可以将时间间隔存储在那里,然后在getDeliveredNotifications
中为每个已发送的通知检查此值。当然,只需将计划通知的标识符与每个通知对应的时间间隔一起存储在字典中。好的……但是您说通知未打开……如果用户点击通知后,将不再重复?抱歉,但我对此完全不熟悉…getDeliveredNotifications
只返回仍在通知中心的通知,这意味着用户尚未打开它们。自从您的第一个通知设置为UNCalendarNotificationTrigger
不会重复,一旦用户打开它,它就会从通知中心删除。因此,当用户在指定日期收到第一个通知时,您应该使用直到IntervalNotificationTrigger
安排通知。有关更多信息,请参阅和响应通知传递部分。