iOS开发中的信息提示推送方式,一类是远程服务器推送(APNS)与UILocalNotification本地通知的,我们知道UILocalNotification的通知重复提示的单位是以是秒、分、时、天、周、月等. 如图:
那么问题来了, 要实现标题所说的该怎么办呢?
哈哈...
小编第一想到是的先判断系统时间为星期几, 然后分别设置5个以周为单位的通知, 但考虑到很麻烦, 小编本人最怕麻烦了? 于是开始向他(她)人请教.
这是位美女哦~ 这里不介绍了, 感谢~~
说到这估计有人要砍人了, 说了这么多, 快说怎么解决吧~~ 那下面就说怎么实现吧!
解决方法
1. 设置一个以天为单位的通知
#pragma mark 本地通知
- (void)setLocalNotification:(UILocalNotification *)mLocalNotification WithTime:(NSString *)notificationTime withTitle:(NSString *)alertBody
{
// 设置通知的标题(操作名称)
mLocalNotification.alertAction = @"这是一条通知";
// 设置通知的正文
mLocalNotification.alertBody = alertBody;
// 设置通知的时间
NSDateFormatter *formattr = [[NSDateFormatter alloc] init];
// 格式化时间
[formattr setDateFormat:@"HH:mm"];
// 触发通知时间
NSDate *now = [formattr dateFromString:notificationTime];
mLocalNotification.fireDate = now;
// 设置重复通知的时间为每日提醒
mLocalNotification.repeatInterval = NSCalendarUnitDay; // kCFCalendarUnitMinute NSCalendarUnitDay
// 通知触发时播放的声音
mLocalNotification.soundName = UILocalNotificationDefaultSoundName;
// 取消通知的时候判断key和ID相同的就是同一个通知了。
NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:notificationTime, @"key" ,nil];
[mLocalNotification setUserInfo:dict];
// 利用Application添加通知
[[UIApplication sharedApplication] scheduleLocalNotification:mLocalNotification];
}
2.在 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification方法中判断是否为周末, 为周末就取消该通知, 那有人又会问了, 怎么取消该通知呢? 请看上面代码, 是否主要到我给通知设定了一个UserInfo, 对了, 就是遍历所以通知, 找到key相同的通知取消, 还是上代码吧!
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
NSDictionary *userInfo = notification.userInfo;
if ([@"10:00" isEqualToString:userInfo[@"key"]]) {
if ([toolset isWeekend]) {
// 取消通知
[self cancelLocalNotificationWithkeyValue:value];
// 重新开启
UILocalNotification *notification = [[UILocalNotification alloc] init];
[self setLocalNotification:notification WithTime:value withTitle:@"好烦好烦..."];
}
}
/** 取消某个的通知 如: value = @"10:00" */
- (void)cancelLocalNotificationWithkeyValue:(NSString *)value
{
NSArray *notifications=[[UIApplication sharedApplication] scheduledLocalNotifications];
NSUInteger acount = notifications.count;
if (acount>0){
for (UILocalNotification *myUILocalNotification in notifications) {
NSDictionary *userInfo = myUILocalNotification.userInfo;
if ([value isEqualToString:userInfo[@"key"]]) {
[[UIApplication sharedApplication] cancelLocalNotification:myUILocalNotification];
NSLog(@"取消: %@", value);
}
}
}
}
好了, 赶紧试试吧! 如果还有更好的方法, 请告知, TKS!