@IBAction func sendNotification(sender: AnyObject) {
var userInfo = Dictionary<String,String>()
userInfo["uid"]="123456"

localNotification.alertAction = "Testing notifications on iOS8"
localNotification.alertBody = "WoWWWWWW background"
// 触发时间
localNotification.fireDate = NSDate() //立即触发
//localNotification.fireDate = NSDate().dateByAddingTimeInterval(10) //10s后触发
localNotification.applicationIconBadgeNumber = 7 //设置app 图标上的数字
localNotification.timeZone = NSTimeZone.defaultTimeZone()
//设置重复触发的间隔, 不设置的时候,只发一次. 这里的间隔只能是固定的几种日历单位,不能随意设置间隔
localNotification.repeatInterval = NSCalendarUnit.MinuteCalendarUnit
localNotification.userInfo = userInfo

UIApplication.sharedApplication().scheduleLocalNotification(localNotification) //按照 localNotification 设置的时间触发
//UIApplication.sharedApplication().presentLocalNotificationNow(localNotification) //马上触发
}

这种通知的限制是,只有当 App 的后台运行的时候或者没有运行的时候(一段时间内,应该是十分钟)才会触发. 如果要在前台运行的时候也触发,需要重写 Appdelegate 中的
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification)

基于 AppDelegate 的这种实现, 可以变线的实现在上面localNotification.repeatInterval 无法实现的自定义时间间隔触发的功能. 也就是在 AppDelegate 中接收到通知后自己再次发送通知

    func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {

var userInfoString = ""
localNotification.alertAction = notification.alertAction
if let userInfoDic = notification.userInfo as? Dictionary<String,String> {
//这里可以获取到发送通知时设置的 userInfo
userInfoString = userInfoDic["uid"]!
}
localNotification.alertBody = notification.alertBody!+"from AppDelegate:\(userInfoString)"
localNotification.fireDate = NSDate().dateByAddingTimeInterval(10)
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}

最后, 已经注册的通知,要手动 cancel 掉.
一种简单粗暴, cancel 掉所有的:

UIApplication.sharedApplication().cancelAllLocalNotifications()

另外如果要只 cancel 指定的通知, 可以利用 userInfo 来实现.比如下面的通过自定义的一个 Uid 来实现

func cancelLocalNotificationByUid(uid: String) {
let allLocalNotifications = UIApplication.sharedApplication().scheduledLocalNotifications as! [UILocalNotification]
for currentLocalNotification in allLocalNotifications {
if let userInfo = currentLocalNotification.userInfo as? Dictionary<String,String> {
if userInfo["uid"] == uid {
UIApplication.sharedApplication().cancelLocalNotification(currentLocalNotification)
}
}
}
}

UILocalNotification 的使用的更多相关文章

  1. iOS调试通过UILocalNotification或RemoteNotification启动的app

    相信很多同学都为调试苹果的通知烦恼过,特别是通过通知启动app这个功能,简直让人欲哭无泪!!! 然而我们都遇到的问题,苹果怎么可能没有想到,原来早就有了官方的解决办法,只是我们不知道而已... 这次又 ...

  2. 用UILocalNotification实现一个闹钟(Swift)

    之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/P ...

  3. UILocalNotification本地通知的使用方法

    本文所写方法主要应用UILocalNotification达到本地推送通知栏信息 取消了其他教程里过期的UIAlertView方法 使用UILocalNotification主要分为创建 调用 取消 ...

  4. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  5. ios 把已经点击过的UILocalNotification 从系统的通知中心现实中移除

    在ios7 上一个uilocalnotification在中心现实后,点击该消息,程序被唤醒了,但是该通知没有被移除.用了以下的代码后可以解决这个问题         UIApplication.sh ...

  6. iOS UILocalNotification 每2周,每两个月提醒

    iOS 的UILocalNotification提醒提供了默认的重复频率,比如,一天,一个星期等等,但是对于非标准的频率,比如每,2周,每2个月,无法重复提醒. 我们的思路是在应用程序开始时,把即将发 ...

  7. iOS - iPhone开发 UILocalNotification的使用

    OS下的Notification的使用 Notification 是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iO ...

  8. Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件

    上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...

  9. Swift - 推送之本地推送(UILocalNotification)

    // 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ...

  10. ios推送:本地通知UILocalNotification

    Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...

随机推荐

  1. WiFi(802.11)基础

    参考: 1. Wireshark数据包分析实战(第2版) 2. wifi技术从了解到熟悉1----概念.802.11协议简述及四种主要物理组件.wifi适配层.wap_supplicant和wap_c ...

  2. eclipse 灵活使用makefile来编译C/C++

    需求: 近期在看<C++ Primer Plus>, 作者在不断优化自己的类.有很多不同的版本号,有非常多的測试函数(main函数),我使用的是eclipse+CDT来编写C++,不可能为 ...

  3. 将php和mysql命令加入到环境变量中

    方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/my ...

  4. 超简单CSS3实现圆角、阴影、透明效果

    CSS实现圆角,阴影,透明的方法很多,传统的方法都比较复杂,用CSS3就方便很多了,虽然现在各浏览器对CSS3的支持还不是很好,但不久的将来CSS3就会普及. 1.圆角 CSS3实现圆角有两种方法. ...

  5. boost 互斥体和锁

    1.共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间应该还钥匙.这就对应着互斥体的lock(取钥匙)和unlock(还钥匙). 2.考虑下面的场景:还钥匙的时候出现异常,会发生 ...

  6. 第二百七十四节,同源策略和跨域Ajax

    同源策略和跨域Ajax 什么是同源策略  尽管浏览器的安全措施多种多样,但是要想黑掉一个Web应用,只要在浏览器的多种安全措施中找到某种措施的一个漏洞或者绕过一种安全措施的方法即可.浏览器的各种保安措 ...

  7. 剑指 offer set 15 第一个只出现一次的字符

    题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符 思路: 1. 给定的题目约束比较多, 因此可以自定义哈希函数 2. 字符是一个长 ...

  8. ios 的EditBox点击空白处不隐藏的解决方案

    原因:参数少了前缀CC 解决方案:修改 cocos/platform/ios/CCEAGLView-ios.mm 中的 handleTouchesAfterKeyboardShow -(void) h ...

  9. Gson 解析JSON数据

    {"province":[{"name":"安徽省","city":[{"name":"安 ...

  10. iOS 7 Master-Detail模板不好用

    将storyboard->use size classes disabled