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

时间:2017-08-07 10:13:28

标签: swift uilocalnotification usernotifications

我正在设置一些本地通知作为提醒。 到目前为止,我已经能够设置一个非重复通知,该通知从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 个答案:

答案 0 :(得分:1)

如果设置UNCalendarNotificatonTrigger,则在设置repeats = true时无法操纵其重复间隔,因为在触发器的日期组件匹配时,它将在每个日期重复。举个例子,如果您只设置hour, minute and second组件,则会每天重复您的通知,因为每天都会出现确切的小时,分​​钟和秒值。如果您只设置minute and second,通知将每小时重复一次。

您正在寻找的是UNTimeIntervalNotificationTrigger,您可以使用它来设置重复间隔。

但是,要符合您的条件,您需要混合两个触发器。您应首先设置一个非重复UNCalendarNotificationTrigger,一旦发出通知,请设置一个重复UNTimeIntervalNotificationTrigger,其中包含来自用户的时间间隔。见UNTimeIntervalNotificationTrigger