2016-11-12 2 views
4

Я работаю над приложением, где пользователь может установить время для ежедневного локального уведомления, а затем у меня есть возможность включить или отключить эти уведомления. Мой вопрос, как я могу отключить/отменить уже установленное уведомление?UserNotifications Отмена, swift3

Здесь, в одном из этого МСФА мне нужно отменить Notif

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    if (indexPath as NSIndexPath).row == 1 && switchiBtn.isOn == false { 

     return 0.0 
    } 
    if (indexPath as NSIndexPath).row == 2 { 
     if switchiBtn.isOn == false || dpVisible == true { 
      return 0.0 
     } 
     return 216.0 
    } 

    if (indexPath as NSIndexPath).row == 3 { 
     if switchiBtn.isOn == false || dpVisible == true { 
      return 0.0 
     } 
     return 44 
    } 
    return 50.0 
} 

Здесь функции для расписания и кнопок, где я настройка получателя уведомления.

func scheduleNotif(date: DateComponents, completion: @escaping (_ Success: Bool) ->()) { 

    let notif = UNMutableNotificationContent() 

    notif.title = "Your quote for today is ready." 
    notif.body = "Click here to open an app." 



    let dateTrigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true) 
    let request = UNNotificationRequest(identifier: "myNotif", content: notif, trigger: dateTrigger) 

    UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in 

     if error != nil { 
      print(error) 
      completion(false) 
     } else { 
      completion(true) 
     } 
    }) 
} 


@IBAction func setACTION(_ sender: AnyObject) { 

    let hour = datePicker.calendar.component(.hour, from: datePicker.date) 
    let minute = datePicker.calendar.component(.minute, from: datePicker.date) 

    var dateComponents = DateComponents() 
    dateComponents.hour = hour 
    dateComponents.minute = minute 
    print(dateComponents) 

    scheduleNotif(date: dateComponents, completion: { success in 
     if success { 
      print("SUCCESS") 

     } else { 
      print("ERROR") 
     } 
    }) 

Спасибо.

+0

Привет, вы можете проверить мой ответ. Не стесняйтесь комментировать любые обсуждения, связанные с этим вопросом или мой ответ – KrishnaCA

ответ

16

Для отмены всех ожидающих уведомлений, вы можете использовать это:

UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 

Для отмены конкретных уведомлений,

UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationRequests) in 
    var identifiers: [String] = [] 
    for notification:UNNotificationRequest in notificationRequests { 
     if notification.identifier == "identifierCancel" { 
      identifiers.append(notification.identifier) 
     } 
    } 
    UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers) 
} 
+0

Это очень помогает, спасибо! – deniskakacka

+0

@deniskakacka, я надеюсь, что это ответит на ваш вопрос – KrishnaCA

+0

yes Его работа сейчас. Еще раз спасибо – deniskakacka

-3

Как уже упоминалось here вы можете отменить все уведомления с помощью следующего кода:

UIApplication.sharedApplication().cancelAllLocalNotifications()

5

Путь тот жеUNNotification - это идентификатор, основанный на identifier, переданный при создании UNNotificationRequest.

В вашем примере выше,

let request = UNNotificationRequest(identifier: "myNotif", content: notif, trigger: dateTrigger) 

Вы на самом деле зашиты в identifier быть "myNotif". Таким образом, всякий раз, когда вы хотите удалить уже установленный уведомление вы можете сделать это:

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "myNotif") 

Однако, обратите внимание, что когда вы жёстко идентификатор, каждый раз, когда вы добавляете request в UNUserNotificationCenter уведомление на самом деле является заменены.

Например, если вы запланировали "myNotif"request набор на 1 минуту позже, но вызвать другую функцию, чтобы запланировать "myNotif" на 1 час позже он будет заменен. Поэтому только последние "myNotif" на один час позже будут в pendingNotificationRequest.

+0

Спасибо. – deniskakacka

Смежные вопросы