系统日历和提醒功能的操作写入编辑读取删除

调用系统的日历和提醒功能时,需要使用导入相关类库头文件#import <EventKit/EventKit.h>

日历功能
写入

- (void)addCalendarWithTitle:(NSString *)title content:(NSString *)content location:(NSString *)location rule:(EKRecurrenceRule *)rule startDate:(NSDate *)startDate endDate:(NSDate *)endDate allDay:(BOOL)allDay alarmArray:(NSArray *)alarmArray complete:(void (^)(EKAuthorizationStatus status, BOOL success, NSError *error))complete
{
    EKEventStore *eventStore = [[EKEventStore alloc] init];
    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error){
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
                BOOL result = NO;
                NSError *errorTmp = error;
                //
                if (error) {
                    
                } else if (!granted) {
                    
                } else {
                    result = YES;
                    //
                    EKEvent *event = [EKEvent eventWithEventStore:eventStore];
                    // 标题
                    event.title = (title && title.length > 0) ? title : @"无标题";
                    // 内容
                    if (content && content.length > 0) {
                        event.notes = content;
                    }
                    // 地点
                    if (location && location.length > 0) {
                        event.location = location;
                    }
                    
                    NSDateFormatter *tempFormatter = [[NSDateFormatter alloc] init];
                    [tempFormatter setDateFormat:@"dd.MM.yyyy HH:mm"];
                    // 开始时间
                    event.startDate = startDate;
                    // 结束时间
                    event.endDate = endDate;
                    // 是否全天
                    event.allDay = allDay;
                    // 重复规则
                    if (rule) {
                        [event addRecurrenceRule:rule];
                    }
                    // 添加提醒
                    [alarmArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                        NSDate *date = (NSDate *)obj;
                        EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:date];
                        [event addAlarm:alarm];
                    }];
                    // 添加到日历
                    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
                    // 保存
                    NSError *err;
                    result = [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
                    errorTmp = err;
                }
                
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (complete) {
                        complete(status, result, errorTmp);
                    }
                });
            });
        }];
    }
}

读取

- (void)readCalendar:(void (^)(EKAuthorizationStatus status, BOOL success, NSArray <EKEvent *> *events))complete
{
    EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    if (status == EKAuthorizationStatusAuthorized) {
        NSDate *dateStart = [NSDate date];
        NSDate *dateEnd = [dateStart dateByAddingTimeInterval:1000];
        // 日历
        EKEventStore *eventStore = [[EKEventStore alloc] init];
        NSArray *array = [eventStore calendarsForEntityType:EKEntityTypeEvent];
        NSMutableArray *arrayTmp = [NSMutableArray new];
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            EKCalendar *calendar = (EKCalendar *)obj;
            EKCalendarType type = calendar.type;
            if ([@[@(EKCalendarTypeLocal), @(EKCalendarTypeCalDAV)] containsObject:@(type)]) {
                [arrayTmp addObject:calendar];
            }
        }];
        NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:dateStart endDate:dateEnd calendars:arrayTmp];
        NSArray *result = [eventStore eventsMatchingPredicate:predicate];
        result = [result sortedArrayUsingSelector:@selector(compareStartDateWithEvent:)];
        if (complete) {
            complete(status, YES, result);
        }
    } else {
        if (complete) {
            complete(status, NO, nil);
        }
    }
}

删除

- (BOOL)removeCalendarWithEKEvent:(EKEvent *)event
{
    if (event) {
        EKEventStore *eventStore = [[EKEventStore alloc] init];
        return [eventStore removeEvent:event span:EKSpanThisEvent commit:YES error:nil];
    }
    return NO;
}

提醒功能
写入

- (void)addReminderWithTitle:(NSString *)title content:(NSString *)content priority:(NSUInteger)priority rule:(EKRecurrenceRule *)rule startDate:(NSDate *)startDate endDate:(NSDate *)endDate alarmArray:(NSArray *)alarmArray complete:(void (^)(EKAuthorizationStatus status, BOOL success, NSError *error))complete
{
    EKEventStore *eventStore = [[EKEventStore alloc] init];
    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
        [eventStore requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError * _Nullable error) {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
                BOOL result = NO;
                NSError *errorTmp = error;
                //
                if (error) {
                    
                } else if (!granted) {

                } else {
                    // 创建一个提醒功能
                    EKReminder *reminder = [EKReminder reminderWithEventStore:eventStore];
                    // 标题
                    reminder.title = title;
                    // 添加提醒
                    [reminder setCalendar:[eventStore defaultCalendarForNewReminders]];
                    
                    NSCalendar *calendar = [NSCalendar currentCalendar];
                    [calendar setTimeZone:[NSTimeZone systemTimeZone]];
                    NSInteger flags = (NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond);
                    // 开始时间
                    NSDateComponents *dateStart = [calendar components:flags fromDate:startDate];
                    dateStart.timeZone = [NSTimeZone systemTimeZone];
                    reminder.startDateComponents = dateStart;
                    // 到期时间
                    NSDateComponents *dateEnd = [calendar components:flags fromDate:endDate];
                    dateEnd.timeZone = [NSTimeZone systemTimeZone];
                    reminder.dueDateComponents = dateEnd;
                    // 优先级(0,1,2,3)
                    reminder.priority = priority;
                    // 重复规则
                    if (rule) {
                        [reminder addRecurrenceRule:rule];
                    }
                    
                    // 添加提醒
                    [alarmArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                        NSDate *date = (NSDate *)obj;
                        EKAlarm *alarm = [EKAlarm alarmWithAbsoluteDate:date];
                        [reminder addAlarm:alarm];
                    }];
                    
                    NSError *err;
                    result = [eventStore saveReminder:reminder commit:YES error:&err];
                    errorTmp = err;
                }
                
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (complete) {
                        complete(status, result, errorTmp);
                    }
                });
            });
        }];
    }
}

读取

- (void)readReminder:(void (^)(EKAuthorizationStatus status, BOOL success, NSArray <EKReminder *> *reminders))complete
{
    EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    if (status == EKAuthorizationStatusAuthorized) {
        // 提醒
        EKEventStore *eventStoreReminder = [[EKEventStore alloc] init];
        NSArray *arrayReminder = [eventStoreReminder calendarsForEntityType:EKEntityTypeReminder];
        NSMutableArray *arrayTmpReminder = [NSMutableArray new];
        [arrayReminder enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            EKCalendar *calendarReminder = (EKCalendar *)obj;
            [arrayTmpReminder addObject:calendarReminder];
        }];
        //
        NSPredicate *predicateReminder = [eventStoreReminder predicateForRemindersInCalendars:arrayTmpReminder];
        [eventStoreReminder fetchRemindersMatchingPredicate:predicateReminder completion:^(NSArray<EKReminder *> * _Nullable reminders) {
            if (complete) {
                complete(status, YES, reminders);
            }
        }];
    } else {
        if (complete) {
            complete(status, NO, nil);
        }
    }
}

删除

- (BOOL)removeReminderWithEKEvent:(EKReminder *)reminder
{
    if (reminder) {
        EKEventStore *eventStore = [[EKEventStore alloc] init];
        return [eventStore removeReminder:reminder commit:YES error:nil];
    }
    return NO;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番薯大佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值