在用户选择的swift 3重复间隔中的本地通知
问题描述:
我想写一些代码,它将允许用户设置自定义本地通知来提醒他们一些任务。 我正在使用用户通知框架。 因此,基本上用户可以决定设置一个通知,它会提醒他每周购买一些肥皂,或每年制作生日祝福或每月检查一些东西(这些仅仅是示例)。在用户选择的swift 3重复间隔中的本地通知
到目前为止,我已经能够设置本地通知没有重复的间隔。
func scheduleNotif() {
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 notif are allowed
let content = UNMutableNotificationContent()
content.title = notifTitleTextField.text!
content.body = notifNoteTextView.text
content.sound = UNNotificationSound.default()
content.badge = UIApplication.shared.applicationIconBadgeNumber + 1 as NSNumber
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)
}
})
}
日期从日期选择器中选取。 现在来自另一个选择器,我希望用户选择重复间隔(无,每日,每周,每月,每年和特定日期)。 我不知道我怎么能做到这一点。我是否需要使用if if语句? (它对我来说看起来不太正确。) 有没有更好的方法来实现这个目标? 谢谢!
答
对于我已将它解决了这样的时刻:
let dateformatter = DateFormatter()
dateformatter.dateStyle = .medium
dateformatter.timeStyle = .short
let dateFromString = dateformatter.date(from: selectDateTextField.text!)
let fireDateOfNotification: Date = dateFromString!
var trigger: UNCalendarNotificationTrigger
var triggerDate: DateComponents
var repeatInterval = Bool()
if repeatingInterval == "Hourly" {
triggerDate = Calendar.current.dateComponents([.minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Daily" {
triggerDate = Calendar.current.dateComponents([.hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Weekly" {
triggerDate = Calendar.current.dateComponents([.weekday, .hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Monthly" {
triggerDate = Calendar.current.dateComponents([.day, .hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else if repeatingInterval == "Yearly" {
triggerDate = Calendar.current.dateComponents([.month, .day, .hour, .minute], from: fireDateOfNotification)
repeatInterval = true
} else {
triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: fireDateOfNotification)
repeatInterval = false
}
trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: repeatInterval)
//Schedule the Notification
......
还没有找到又一个的方式以安排不同的时间间隔(如每隔两周,每隔一天,每半年等) 。 我仍会研究它。 :)