2

我正在设置一些本地通知作为提醒。到目前为止,我已经能够设置一个非重复通知,该通知从从 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语句来实现它是否正确?(在我看来有点不对劲,似乎不是正确的方法)谢谢。

4

1 回答 1

2

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

您正在寻找的是UNTimeIntervalNotificationTrigger,这是您可以设置重复间隔的一个。

但是,要符合您的条件,您需要混合使用这两个触发器。您应该首先设置一个非重复UNCalendarNotificationTrigger,一旦该通知被传递,设置一个UNTimeIntervalNotificationTrigger来自用户的时间间隔的重复。请参阅UNTimeIntervalNotificationTrigger

于 2017-08-07T10:21:13.350 回答