将事件添加到系统日历中,并且添加到提醒事项中

来源:互联网 发布:中国蓝tv网络直播 编辑:程序博客网 时间:2024/04/30 08:04

具体代码如下(代码来着网路):

/*

1.0版本示例

初始建立 将事件添加到系统日历中,并且添加到提醒事项中

 */

/*代码示例

 NSDate*startData=[NSDate dateWithTimeIntervalSinceNow:10];

 NSDate*endDate=[NSDate dateWithTimeIntervalSinceNow:20];

 //设置事件之前多长时候开始提醒

 float alarmFloat=-5;

 NSString*eventTitle=@"提醒事件标题";

 NSString*locationStr=@"提醒副标题";

 //isReminder 是否写入提醒事项

 [ZCActionOnCalendar saveEventStartDate:startData endDate:endDate alarm:alarmFloat eventTitle:eventTitle location:locationStr isReminder:YES];

 2014.4.29

 //注意 在参数第十八行需要设置不同的参数,然后进行判断是事件提醒还是日历事件

 //EKEntityMaskEvent提醒事项参数(该参数只能真机使用)  EKEntityTypeEvent日历时间提醒参数


 */

#import <Foundation/Foundation.h>


@interface ZCActionOnCalendar : NSObject

+ (void)saveEventStartDate:(NSDate*)startData endDate:(NSDate*)endDate alarm:(float)alarm eventTitle:(NSString*)eventTitle location:(NSString*)location isReminder:(BOOL)isReminder;

@end



#import "ZCActionOnCalendar.h"

#import <EventKit/EventKit.h>

@implementation ZCActionOnCalendar

+ (void)saveEventStartDate:(NSDate*)startData endDate:(NSDate*)endDate alarm:(float)alarm eventTitle:(NSString*)eventTitle location:(NSString*)location isReminder:(BOOL)isReminder{

    //事件市场

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    //6.0及以上通过下⾯面⽅方式写⼊入事件

    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {

        //等待用户是否同意授权日历

        //EKEntityMaskEvent提醒事项参数(该参数只能真机使用)  EKEntityTypeEvent日历时间提醒参数

        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

            

            dispatch_async(dispatch_get_main_queue(), ^{

                if (error)

                {

                }else if (!granted)

                {

                    //被⽤用户拒绝,不允许访问⽇日历

                    

                }else{

                    //事件保存到⽇日历

                    //创建事件

                    EKEvent *event = [EKEvent eventWithEventStore:eventStore];

                    event.title = eventTitle;

                    event.location = location;

                    //设定事件开始时间

                    //[NSDate dateWithTimeIntervalSinceNow:10];

                    event.startDate=startData;

                    

                    //设定事件结束时间

                    //[NSDate dateWithTimeIntervalSinceNow:20];

                    event.endDate=endDate;

                    //添加提醒可以添加多个,设定事件多久以前开始提醒

                    // event.allDay = YES;

                    //在事件前多少秒开始事件提醒-5.0f

                    [event addAlarm:[EKAlarm alarmWithRelativeOffset:alarm]];

                    

                    [event setCalendar:[eventStore defaultCalendarForNewEvents]];

                    NSError *err;

                    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

                    NSLog(@"保存成功");

                    

                    

                    

                    

                    

                    //是否写入提醒事项,提醒事项为iOS原生自带的,但是模拟器没有的

                    if (isReminder) {

                        EKCalendar * iDefaultCalendar = [eventStore defaultCalendarForNewReminders];

                        

                        EKReminder *reminder=[EKReminder reminderWithEventStore:eventStore];

                        reminder.calendar=[eventStore defaultCalendarForNewReminders];

                        

                        reminder.title=eventTitle;

                        reminder.calendar = iDefaultCalendar;

                        EKAlarm *alarm=[EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeIntervalSinceNow:-10]];

                        [reminder addAlarm:alarm];

                        NSError *error=nil;

                        

                        

                        [eventStore saveReminder:reminder commit:YES error:&error];

                        if (error) {

                            

                            NSLog(@"error=%@",error);

                            

                        }

                        

                    }

                }

                

            });

        }];

        

    }else{

        //4.05.0通过下述⽅方式添加无需判断用户是否同意访问日历

        //事件保存到⽇日历

        //创建事件

        EKEvent *event = [EKEvent eventWithEventStore:eventStore];

        event.title = eventTitle;

        event.location = location;

        //设定事件开始时间

        //[NSDate dateWithTimeIntervalSinceNow:10];

        event.startDate=startData;

        

        //设定事件结束时间

        //[NSDate dateWithTimeIntervalSinceNow:20];

        event.endDate=endDate;

        //添加提醒可以添加多个,设定事件多久以前开始提醒

        // event.allDay = YES;

        //在事件前多少秒开始事件提醒-5.0f

        [event addAlarm:[EKAlarm alarmWithRelativeOffset:alarm]];

        

        [event setCalendar:[eventStore defaultCalendarForNewEvents]];

        NSError *err;

        [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

        NSLog(@"保存成功");

        

        //是否写入提醒事项,提醒事项为iOS原生自带的,但是模拟器没有的

        if (isReminder) {

            EKCalendar * iDefaultCalendar = [eventStore defaultCalendarForNewReminders];

            EKReminder *reminder=[EKReminder reminderWithEventStore:eventStore];

            reminder.calendar=[eventStore defaultCalendarForNewReminders];

            reminder.title=eventTitle;

            reminder.calendar = iDefaultCalendar;

            EKAlarm *alarm=[EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeIntervalSinceNow:-10]];

            [reminder addAlarm:alarm];

            NSError *error=nil; 

            [eventStore saveReminder:reminder commit:YES error:&error];

            if (error) {

                NSLog(@"error=%@",error);

            }

        }

    }

}


需要的类库:UIEventKit.framework


0 0
原创粉丝点击