0

Ich versuche, einen Code zu schreiben, mit dem Benutzer benutzerdefinierte lokale Benachrichtigungen festlegen können, um sie an einige Aufgaben zu erinnern. Ich benutze das Benutzerbenachrichtigungsframework. Im Grunde kann ein Benutzer entscheiden, eine Benachrichtigung zu setzen, die ihn daran erinnert, jede Woche etwas Seife zu kaufen oder jedes Jahr Geburtstagswünsche zu machen oder jeden Monat etwas zu überprüfen (dies sind nur Beispiele).Lokale Benachrichtigung in swift 3 Wiederholungsintervall von Benutzern ausgewählt

Bisher konnte ich eine lokale Benachrichtigung ohne Wiederholungsintervall festlegen.

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) 
     } 
    }) 
} 

Das Datum wird von einer Datumsauswahl ausgewählt. Jetzt von einem anderen Picker ich möchte, dass der Benutzer das Wiederholungsintervall (keine, tägliche, wöchentliche, monatliche, jährliche und an bestimmten Tagen) auswählen. Ich bin mir nicht sicher, wie ich das erreichen kann. Muss ich eine if else if-Anweisung verwenden? (Es scheint mir nicht wirklich richtig.) Gibt es einen besseren Weg, dies zu erreichen? Vielen Dank!

Antwort

0

Für den Moment, als ich es auf diese Weise behoben haben:

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 
...... 

Haben noch nicht einen Weg finden, es für verschiedene Intervall zu planen (zB alle zwei Wochen, jeden zweiten Tag, alle sechs Monate usw.) . Ich werde noch drüber nachdenken. :)

Verwandte Themen