MacOS 开发
来源:互联网 发布:驾驶员网络培训 编辑:程序博客网 时间:2024/06/08 05:37
- 一EventKit事件库框架
- 设置授权
- 1在 infoplist 中添加授权描述
- 2获取授权状态 authorizationStatusForEntityType
- 授权状态枚举
- 3请求权限 requestAccessToEntityType
- EKEntityType 有两类
- 请求权限效果如下
- 设置授权
- 二EKReminder 提醒事项
- 1添加提醒事项
- 2获取提醒事项
- 三EKCalendar 日历
- 1添加日历项
- 2获取日历项
- 参考资料
一、EventKit(事件库框架)
使用日历和提醒事项,必须导入 EventKit 框架。在 project 中添加框架后,控制器中需要 #import <EventKit/EventKit.h>
EventKit授 权访问用户的 Calendar.app(日历) 和 Reminders.app(提醒事项) 应用的信息。尽管是用两个不同的应用显示用户的日历和提醒数据,但确是同一个框架维护这份数据。他们使用相同的库(EKEventStore)处理数据。
该框架除了允许检索用户已经存在的calendar和reminder数据外,还允许创建新的事件和提醒。更高级的任务,诸如添加闹钟或指定循环事件,也可以使用事件库完成。
设置、授权
无论是调用日历,还是提醒事项,都需要进行以下操作:
1、在 info.plist 中添加授权描述
这些描述会在请求权限的弹窗中显示。
2、获取授权状态 authorizationStatusForEntityType
EKAuthorizationStatus eventStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
授权状态枚举
typedef NS_ENUM(NSInteger, EKAuthorizationStatus) { EKAuthorizationStatusNotDetermined = 0,//用户还没授权过 EKAuthorizationStatusRestricted,//未授权,且用户无法更新,如家长控制情况下 EKAuthorizationStatusDenied,//用户授权不允许 EKAuthorizationStatusAuthorized,//用户已经允许授权} NS_AVAILABLE(10_9, 6_0);
3、请求权限 requestAccessToEntityType
//提示用户授权,调出授权弹窗 [[[EKEventStore alloc]init] requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) { if(granted){ NSLog(@"允许"); }else{ NSLog(@"拒绝授权"); }}];
EKEntityType 有两类
- EKEntityTypeEvent日历事件
- EKEntityTypeReminder//提醒事项
请求权限效果如下:
二、EKReminder 提醒事项
1、添加提醒事项
- (void)addReminderItem{ EKEventStore *eventStore = [[EKEventStore alloc]init]; [eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) { EKReminder *reminder = [EKReminder reminderWithEventStore:eventStore]; reminder.calendar = [eventStore defaultCalendarForNewReminders]; reminder.title = @"提醒你哦"; reminder.calendar = [eventStore defaultCalendarForNewReminders];; EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeIntervalSinceNow:20]]; [reminder addAlarm:alarm]; NSError *err = nil; [eventStore saveReminder:reminder commit:YES error:&err]; if (error) { NSLog(@"error=%@",error); }else{ NSLog(@"保存到提醒事项成功"); } }];}
2、获取提醒事项
- (void)getReminders{ EKEventStore *eventStore = [[EKEventStore alloc]init]; NSArray *reminderArray = [eventStore calendarsForEntityType:EKEntityTypeReminder]; [eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) { if (!granted) { return ; } //获取提醒事项的分类 for (EKCalendar *calendar in reminderArray) { NSLog(@"title:%@ , type:%ld , calendarIdentifier:%@",calendar.title,(long)calendar.type,calendar.calendarIdentifier); } //来查找所有的reminders NSPredicate *pre =[eventStore predicateForRemindersInCalendars:@[reminderArray.firstObject]]; //异步方法。 [eventStore fetchRemindersMatchingPredicate:pre completion:^(NSArray<EKReminder *> * _Nullable reminders) { //异步查找出提醒事项数组reminders,这里可根据需求进一步进行对数组的操作 /* reminders 数组里存的是EKReminder 对象。 列举EKReminder 的一些属性: title:标题 notes:备注 priority:优先级(NSUInteger) 0无级别,1级别高---9级别低(1-4高,5中等,6-9低) completed:是否已完成 completionDate:完成时间 alarms:提醒数组(数组里是EKAlarm对象, 可以获得跟闹钟相关的数据,如具体时间,偏移秒数...) */ for (EKReminder *reminder in reminders) { NSLog(@"reminder - title:%@ , notes:%@",reminder.title,reminder.notes); } }]; }];}
三、EKCalendar 日历
1、添加日历项
- (void)addCalendarItem{ EKEventStore *eventStore = [[EKEventStore alloc]init]; EKEvent *event = [EKEvent eventWithEventStore:eventStore]; /** 向日历添加一个事件 * title 事件标题 * notes 事件备注 * location 事件地址 * startDate 开始日期 * endDate 结束日期 * alarms 闹钟 * availability 事件调度 */ event.title = @"title";// event.location = location; //[NSDate dateWithTimeIntervalSinceNow:10]; //[NSDate dateWithTimeIntervalSinceNow:20]; NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:10]; NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:20]; //设定事件开始时间 event.startDate = startDate; //设定事件结束时间 event.endDate=endDate; //添加提醒 可以添加多个,设定事件多久以前开始提醒 //event.allDay = YES; //在事件前多少秒开始事件提醒 -5.0f EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:-5.f]; [event addAlarm:alarm]; [event setCalendar:[eventStore defaultCalendarForNewEvents]]; NSError *error; [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error]; NSLog(@"保存成功");}
如果增加提示后,效果如下:
2、获取日历项
#pragma mark - 获取日历事件- (void)getCalendar{ EKEventStore *store = [[EKEventStore alloc] init]; [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) { NSLog(@"granted:%d",granted); if (granted) { NSDate *startDate = [self dateFromString:@"2017-08"];//事件段,开始时间 NSDate *endDate = [self dateFromString:@"2018-01"];//结束时间,取中间 NSPredicate *fetchCalendarEvents = [store predicateForEventsWithStartDate:startDate endDate:endDate calendars:nil]; NSArray<EKEvent *> *eventList = [store eventsMatchingPredicate:fetchCalendarEvents]; NSArray<EKEvent *> *events = [eventList filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(EKEvent * _Nullable event, NSDictionary<NSString *,id> * _Nullable bindings) { return event.calendar.subscribed; }]]; NSLog(@"events:<<<<<<<<<<<< %@ >>>>>>>>>>>",events); for (EKEvent *event in events) { NSLog(@"title : %@ , startDate : %@ , endDate : %@ , calendarItemIdentifier : %@",event.title,event.startDate,event.endDate,event.calendarItemIdentifier); } } }];}- (NSDate *)dateFromString:(NSString *)dateString{ //设置转换格式 NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ; [formatter setDateFormat:@"yyyy-MM"]; NSDate *date = [formatter dateFromString:dateString]; return date;}
参考资料
exialym:EventKit
http://www.jianshu.com/p/a6255378caa0Echo126:iOS读,写,删除系统提醒事项和日历事件(二)
http://www.jianshu.com/p/5f3489d162e6
阅读全文
0 0
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- 51单片机外设之——矩阵键盘(传统法一)
- 感知机简介及python代码简介
- pandas入门学习
- 最长回文子串(马拉车)
- 使用splash爬去JavaScript动态请求的内容
- MacOS 开发
- flex属性问题以及内容居中
- 283. Move Zeroes
- HDU 4605 主席树
- 小Z的袜子 题解报告【莫队】
- [spark] RDD缓存源码解析
- C# 与 Java 通过Base64传送图片
- Anaconda3 5.0.0中配置Python 3.6 + TensorFlow环境
- 如何获取系统架构