how to cancel a localNotification with the press of a button in swift?

I am scheduling a location based UILocalNotification with the click of a button . But when i try to cancel the localNotification by clicking the same button again, it doesn’t cancel the notification.
I am using UIApplication.sharedApplication().cancelLocalNotification(localNotification)
to cancel my scheduled location based local notification.
What am i doing wrong ?
here is my implementation

@IBAction func setNotification(sender: UIButton!) {
    if sender.tag == 999 {
        sender.setImage(UIImage(named: "NotificationFilled")!, forState: .Normal)
        sender.tag = 0
        regionMonitor() //function where notification get scheduled

    } else {
        sender.setImage(UIImage(named: "Notification")!, forState: .Normal)
        sender.tag = 999 }

what should i enter into the else block so that the scheduled notification gets canceled. Cannot clear all notifications.
here is the didEnterRegion block code where i trigger the local notification

  • NSURLSession Memory Leaks occur when using web services in IOS
  • iOS input focused inside fixed parent stops position update of fixed elements
  • in iOS 7 viewForHeaderInSection section is starting from 1 not from 0
  • ios capturing image using AVFramework
  • GPX File does not load iOS Xcode
  • How to scroll to the bottom of a UITableView on the iPhone before the view appears
  • func locationManager(manager: CLLocationManager!, didEnterRegion region: CLRegion!) {
        localNotification.regionTriggersOnce = true
        localNotification.alertBody = "Stack Overflow is great"
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
        NSLog("Entering region")
    }
    

    5 Solutions Collect From Internet About “how to cancel a localNotification with the press of a button in swift?”

    You could try to remove all notifications if this is acceptable in your context.
    Like this:

    for notification in UIApplication.sharedApplication().scheduledLocalNotifications as! [UILocalNotification] { 
      UIApplication.sharedApplication().cancelLocalNotification(notification)
    }
    

    Or as stated by Logan:

    UIApplication.sharedApplication().cancelAllLocalNotifications()
    

    Or as stated by Gerard Grundy for Swift 4:

    UNUserNotificationCenter.current().removeAllPendingNotificat‌​ionRequests()
    

    You can save a unique value for key in your local notification’s userinfo and cancel it by getting the localnotification using that key’s Value.
    Try this (for Objective C):

    NSArray *notifArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
    for (int i=0; i<[notifArray count]; i++)
    {
        UILocalNotification* notif = [notifArray objectAtIndex:i];
        NSDictionary *userInfoDict = notif.userInfo;
        NSString *uniqueKeyVal=[NSString stringWithFormat:@"%@",[userInfoDict valueForKey:@"UniqueKey"]];
        if ([uniqueKeyVal isEqualToString:keyValToDelete])
        {
            [[UIApplication sharedApplication] cancelLocalNotification:notif];
            break;
        }
    }
    

    Solution for iOS 10+ Swift 3.1

    let center = UNUserNotificationCenter.current()
    center.removeAllDeliveredNotifications() // To remove all delivered notifications
    center.removeAllPendingNotificationRequests()
    

    For Swift 3.0 and iOS 10:

    UNUserNotificationCenter.current().removeAllDeliveredNotifications()
    

    Hard to tell without seeing the implementation of the code.

    so you have an

    - IBAction methodName{
    
    //scheduleNotification
    //cancelNotification
    }
    

    Is that about right? If so add a bool so

    Bool didCancel;
    
    - IBAction methodName{
    
    if didCancel == No{
    //scheduleNotification
    didCancel = YES;
    }else if didCancel == YES{
    //cancelNotifications
    didCancel = NO;
    }