IOS利用EventKit可以实现添加提醒和添加事件(日历)的功能
EKEventStore类
该类负责日历和提醒事件的管理,可以简单理解为数据库,可以对事件进行增删改查。
查询今天暂且不表,只说如何添加事件和提醒。
因为它就像数据库一样,频繁的开启,关闭会影响效率,所以如果你的程序需要频繁操作日历和提醒,
建议仅生成该对象一次,仅用一个对象进行操作。
EKEventStore类
该类负责日历和提醒事件的管理,可以简单理解为数据库,可以对事件进行增删改查。
查询今天暂且不表,只说如何添加事件和提醒。
因为它就像数据库一样,频繁的开启,关闭会影响效率,所以如果你的程序需要频繁操作日历和提醒,
建议仅生成该对象一次,仅用一个对象进行操作。
@interface ViewController ()@end
@implementation ViewController
- (void)viewDidLoad{
[super viewDidLoad];
[self addEventNotify:[NSDate dateWithTimeIntervalSinceNow:60] title:@"测试事件"];
}
-(void)addEventNotify:(NSDate *)date title:(NSString *)title
{
//生成事件数据库对象
EKEventStore *eventDB = [[EKEventStore alloc] init];
//申请事件类型权限
[eventDB requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) {
if (granted) { //授权是否成功
EKEvent *myEvent = [EKEvent eventWithEventStore:eventDB]; //创建一个日历事件
myEvent.title = title; //标题
myEvent.startDate = date; //开始date required
myEvent.endDate = date; //结束date required
[myEvent addAlarm:[EKAlarm alarmWithAbsoluteDate:date]]; //添加一个闹钟 optional
[myEvent setCalendar:[eventDB defaultCalendarForNewEvents]]; //添加calendar required
NSError *err;
[eventDB saveEvent:myEvent span:EKSpanThisEvent error:&err]; //保存
}
}];
}
-(void)addReminderNotify:(NSDate *)date title:(NSString *)title
{
EKEventStore *eventDB = [[EKEventStore alloc] init];
//申请提醒权限
[eventDB requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
//创建一个提醒功能
EKReminder *reminder = [EKReminder reminderWithEventStore:eventDB];
//标题
reminder.title = title;
//添加日历
[reminder setCalendar:[eventDB defaultCalendarForNewReminders]];
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone systemTimeZone]];
NSInteger flags = NSCalendarUnitYear | NSCalendarUnitMonth |
NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute |
NSCalendarUnitSecond;
NSDateComponents* dateComp = [cal components:flags fromDate:date];
dateComp.timeZone = [NSTimeZone systemTimeZone];
reminder.startDateComponents = dateComp; //开始时间
reminder.dueDateComponents = dateComp; //到期时间
reminder.priority = 1; //优先级
EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:date]; //添加一个车闹钟
[reminder addAlarm:alarm];
NSError *err;
[eventDB saveReminder:reminder commit:YES error:&err];
if (err) {
}
}
}];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end