如何在本地iOS日历中添加事件(How to add event in native IOS Cal

2019-08-18 13:36发布

我想打开从我的应用原生iOS日历(iCal中),并添加事件。 有什么办法,我可以打开特定事件日历?

我也跟着打开iPhone日历应用程序 ,但尚未成功。

Answer 1:

查看日历和提醒编程指南 。 但基本过程是:

  1. 添加EventKit.FrameworkEventKitUI.Framework到您的项目。 (见链接到库或框架 。)

  2. 导入标题:

     #import <EventKitUI/EventKitUI.h> 
  3. 如果创建一个事件,您可以使用:

     - (IBAction)didPressCreateEventButton:(id)sender { EKEventStore *store = [[EKEventStore alloc] init]; if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { // iOS 6 [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [self createEventAndPresentViewController:store]; }); } }]; } else { // iOS 5 [self createEventAndPresentViewController:store]; } } - (void)createEventAndPresentViewController:(EKEventStore *)store { EKEvent *event = [self findOrCreateEvent:store]; EKEventEditViewController *controller = [[EKEventEditViewController alloc] init]; controller.event = event; controller.eventStore = store; controller.editViewDelegate = self; [self presentViewController:controller animated:YES completion:nil]; } 
  4. 您的视图控制器应符合EKEventEditViewDelegate协议:

     @interface ViewController () <EKEventEditViewDelegate> 

    并实现didCompleteWithAction方法:

     - (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action { [self dismissViewControllerAnimated:YES completion:nil]; } 
  5. 可以很明显的创建活动,你想要的任何方式。 例如,这会在下周提供相应的标题一个事件,如果没有找到它,创建一个新的事件(小时长的事件在四个小时内开始):

     - (EKEvent *)findOrCreateEvent:(EKEventStore *)store { NSString *title = @"My event title"; // try to find an event EKEvent *event = [self findEventWithTitle:title inEventStore:store]; // if found, use it if (event) return event; // if not, let's create new event event = [EKEvent eventWithEventStore:store]; event.title = title; event.notes = @"My event notes"; event.location = @"My event location"; event.calendar = [store defaultCalendarForNewEvents]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [[NSDateComponents alloc] init]; components.hour = 4; event.startDate = [calendar dateByAddingComponents:components toDate:[NSDate date] options:0]; components.hour = 1; event.endDate = [calendar dateByAddingComponents:components toDate:event.startDate options:0]; return event; } - (EKEvent *)findEventWithTitle:(NSString *)title inEventStore:(EKEventStore *)store { // Get the appropriate calendar NSCalendar *calendar = [NSCalendar currentCalendar]; // Create the start range date components NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init]; oneDayAgoComponents.day = -1; NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents toDate:[NSDate date] options:0]; // Create the end range date components NSDateComponents *oneWeekFromNowComponents = [[NSDateComponents alloc] init]; oneWeekFromNowComponents.day = 7; NSDate *oneWeekFromNow = [calendar dateByAddingComponents:oneWeekFromNowComponents toDate:[NSDate date] options:0]; // Create the predicate from the event store's instance method NSPredicate *predicate = [store predicateForEventsWithStartDate:oneDayAgo endDate:oneWeekFromNow calendars:nil]; // Fetch all events that match the predicate NSArray *events = [store eventsMatchingPredicate:predicate]; for (EKEvent *event in events) { if ([title isEqualToString:event.title]) { return event; } } return nil; } 


Answer 2:

使用URL方案打开本机压光机的应用程序。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"calshow://"]];

http://devsupport.layar.com/entries/23687993-How-to-use-Custom-URI-Scheme-Button-in-the-Creator-



Answer 3:

下面的代码有助于添加事件,本地日历。

- (NSString*)addEventToCalendarWithTitle:(NSString *)eventTitlestr Description:(NSString *)eventDescriptionstr startDate:(NSString *)startDatestr startTime:(NSString *)startTimestr {
        NSString *returneventidentifier=nil;
        if (__IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED) {
                NSDateFormatter *formatter_=[[NSDateFormatter alloc]init];
                NSTimeZone *gmtZone = [NSTimeZone systemTimeZone];
                NSDate *startedDate=nil;
                NSDate *endedDate=nil;
                [formatter_ setTimeZone:gmtZone];
                NSLocale *enLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"];
                formatter_.locale = enLocale;
                [enLocale release];
                if (startDatestr!=nil&&startTimestr!=nil) {
                        startDatestr = [startDatestr stringByAppendingString:startTimestr];
                    }
                [formatter_ setDateFormat:[DATE_FORMAT_FROM_RESPONSE stringByAppendingString:TIME_FORMAT_FROM_RESPONSE]]; // here date and time formats are appended as datestring and time string are appended
                if(startDatestr!=nil){
                        
                        startedDate = [formatter_ dateFromString:startDatestr];
                        EKEventStore *eventStore = [[EKEventStore alloc] init];
                        //            __block BOOL accessGranted = NO;
                        //            if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
                        //                dispatch_semaphore_t sema = dispatch_semaphore_create(0);
                        //                [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
                        //                    accessGranted = granted;
                        //                    dispatch_semaphore_signal(sema);
                        //                }];
                        //                dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
                        //            } else { // we're on iOS 5 or older
                        //                accessGranted = YES;
                        //            }
                        //            
                        //            if (accessGranted) {
                        //            }
                        EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
                        event.title     = eventTitlestr;
            event.notes = eventDescriptionstr;
                        event.startDate = startedDate;
                        endedDate = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];
                        event.endDate   =endedDate ;
                        event.alarms=[NSArray arrayWithObject:[EKAlarm alarmWithRelativeOffset:DEFAULTALERTTIME]];
                        [event setCalendar:[eventStore defaultCalendarForNewEvents]];
                        NSError *err;
                        [eventStore saveEvent:event span:EKSpanThisEvent error:&err];  
                        [eventStore release];
                        eventStore=nil;
                        [endedDate release];
                        endedDate=nil;
                        returneventidentifier=event.eventIdentifier;
                    }
                [formatter_ release];
                formatter_=nil;
                
            }
        else {
                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert !" message:@"Lower IOS versions event adding functionality is not possible." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
            }
        return returneventidentifier;
}


文章来源: How to add event in native IOS Calendar