本地推送通知UILocalNotification
2016-03-19 23:40
525 查看
http://www.brighttj.com/ios/ios-uiocalnotification.html
本地推送通知(UILocalNotification)其实也是通知的一种,系统能在具体的时间触发它,而不用App来触发。本地通知触发后,会显示在通知中心中,并根据配置,显示横幅与声音。
本地通知在项目中的运用很有特点,大多都和时间相关。如:备忘录、闹钟(自定义闹钟)、生日提醒等等。
文本将讲解如何简单使用本地通知,并在不需要的时候,进行通知移除。
本文Demo下载地址:
https://github.com/saitjr/UILocalNotificationDemo.git
环境信息:
Mac OS X 10.10.3
Xcode 6.3
iOS 8.3
正文:
创建一个SingleViewApplication,并将一个UISwitch控件拖到StoryBoard中,添加居中约束。(添加完以后,注意点击Add 2 Constraints)
放入UISwitch并添加约束
关联UISwitch事件
设置UISwitch时间
当本地通知触发后,需要在AppDelegate中进行接收并做相应处理。在AppDelegate中,实现以下方法:
移除本地通知的方法有两种,一种是全部移除:
一种是按照id来移除,这个id就是在注册通知时,写的id:
1. 如果需要做一个闹钟或备忘录之类的应用,则将时间作为fireDate,触发之后可以进行移除;
2. 一个App中,本地通知数量最多64个,不用的通知要及时移除;
3. 如果通知的时间是后台返回的,那每次需要将通知全部移除,再添加新的。
本地推送通知(UILocalNotification)其实也是通知的一种,系统能在具体的时间触发它,而不用App来触发。本地通知触发后,会显示在通知中心中,并根据配置,显示横幅与声音。
本地通知在项目中的运用很有特点,大多都和时间相关。如:备忘录、闹钟(自定义闹钟)、生日提醒等等。
文本将讲解如何简单使用本地通知,并在不需要的时候,进行通知移除。
本文Demo下载地址:
https://github.com/saitjr/UILocalNotificationDemo.git
环境信息:
Mac OS X 10.10.3
Xcode 6.3
iOS 8.3
正文:
一、创建工程
创建一个SingleViewApplication,并将一个UISwitch控件拖到StoryBoard中,添加居中约束。(添加完以后,注意点击Add 2 Constraints)放入UISwitch并添加约束
二、为UISwitch关联事件
关联UISwitch事件
设置UISwitch时间
三、给ViewController添加注册/移除本地通知的两个方法
- (void)scheduleLocalNotification { } - (void)removeLocalNotification { }
四、在UISwitch的响应事件中,对两个方法进行调用
- (IBAction)switchTapped:(id)sender { UISwitch *switcher = (UISwitch *)sender; if (switcher.on) { [self scheduleLocalNotification]; return; } [self removeLocalNotification]; }
五、注册本地通知
- (void)scheduleLocalNotification { // 初始化本地通知 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; // 通知触发时间 localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:3]; // 触发后,弹出警告框中显示的内容 localNotification.alertBody = @"弹出警告框中显示的内容"; // 触发时的声音(这里选择的系统默认声音) localNotification.soundName = UILocalNotificationDefaultSoundName; // 触发频率(repeatInterval是一个枚举值,可以选择每分、每小时、每天、每年等) localNotification.repeatInterval = NSCalendarUnitDay; // 需要在App icon上显示的未读通知数(设置为1时,多个通知未读,系统会自动加1,如果不需要显示未读数,这里可以设置0) localNotification.applicationIconBadgeNumber = 1; // 设置通知的id,可用于通知移除,也可以传递其他值,当通知触发时可以获取 localNotification.userInfo = @{@"id" : @"notificationId1"}; // 注册本地通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; }
六、接收本地通知
当本地通知触发后,需要在AppDelegate中进行接收并做相应处理。在AppDelegate中,实现以下方法:- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:notification.alertBody delegate:nil cancelButtonTitle:@"确认" otherButtonTitles:nil]; [alert show]; }
七、移除本地通知
移除本地通知的方法有两种,一种是全部移除:[[UIApplication sharedApplication] cancelAllLocalNotifications];
一种是按照id来移除,这个id就是在注册通知时,写的id:
- (void)removeLocalNotification { // 取出全部本地通知 NSArray *notifications = [UIApplication sharedApplication].scheduledLocalNotifications; // 设置要移除的通知id NSString *notificationId = @"notificationId1"; // 遍历进行移除 for (UILocalNotification *localNotification in notifications) { // 将每个通知的id取出来进行对比 if ([[localNotification.userInfo objectForKey:@"id"] isEqualToString:notificationId]) { // 移除某一个通知 [[UIApplication sharedApplication] cancelLocalNotification:localNotification]; } } }
八、注意事项
1. 如果需要做一个闹钟或备忘录之类的应用,则将时间作为fireDate,触发之后可以进行移除;2. 一个App中,本地通知数量最多64个,不用的通知要及时移除;
3. 如果通知的时间是后台返回的,那每次需要将通知全部移除,再添加新的。
相关文章推荐
- iOS推送:本地通知UILocalNotification
- easyui1.4.4 datebox 新增清空按钮
- QA1:sequence/sequencer/virtual sequence 区别
- Android高阶UI之开源项目
- java并发-Queue及Synchronized、ThreadLocal
- Hibernate逍遥游记-第4章映射对象标识符-increment、identity、hilo、native、assigned、sequence、<meta>
- 如何取出Map的key和value值
- Android的消息机制学习(一)Looper,Handler,MessageQueue
- Map stack和Queue -java
- PSR-2 Coding Style Guide
- UITableView详细注释
- Builer(生成器模式)
- (转)Android中的Handler, Looper, MessageQueue和Thread
- Android模拟器BlueStacks的使用
- UIView的属性介绍
- 优先队列(priority_queue)
- UESTC 1012-Ladygod【没有负数】
- [转]String,StringBuffer与StringBuilder的区别??
- BZOJ_P3101 N皇后/POJ_P3239 Solution to the n Queens Puzzle(N皇后构造)
- UESTC 1271 Search gold【dp】