Cómo agregar eventos en el Calendario nativo de IOS

Quiero abrir nativas de IOS calendario(ical) de mi aplicación y añadir evento.
Hay alguna manera de que pueda abrir el calendario para el evento en particular?

También me siga Abrir el iphone app de calendario mediante programación pero no lo ha conseguido.

SBSLaunchApplicationWithIdentifier(CFSTR("com.apple.mobilecal"), false);, pero es privado.
me dices que la biblioteca o de la aplicación de ejemplo que se han referido a la pantalla nativas de IOS calendario?

OriginalEl autor Akshay Nalawade | 2013-04-01

3 Kommentare

  1. 31

    Ver el Calendario y los Recordatorios de la Guía de Programación. Pero el proceso básico es:

    1. Agregar el EventKit.Framework y EventKitUI.Framework a su proyecto. (Ver La vinculación a una Biblioteca o Framework.)

    2. Importar el encabezado:

      #import <EventKitUI/EventKitUI.h>
    3. Si la creación de un evento, utilizar :

      - (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. Su controlador de vista, deben ajustarse a la EKEventEditViewDelegate protocolo:

      @interface ViewController () <EKEventEditViewDelegate>

      y aplicar la didCompleteWithAction método:

      - (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action
      {
          [self dismissViewControllerAnimated:YES completion:nil];
      }
    5. Obviamente, puede crear su evento de cualquier manera que usted desea. Por ejemplo, esto se ve de un evento de la próxima semana con el título correspondiente, y si no la encuentra, crear un nuevo evento (hora larga cita que comienza en cuatro horas):

      - (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;
      }
    Gracias rob. A pesar de que no soy capaz de abrir la aplicación calendario directamente todavía que la solución está cerca de lo que yo necesitaba.
    gracias..!Trabajó para mí.
    Gracias se adhiere, su trabajo fino de mí, yo solo copie y pegue como su.
    Gran respuesta, (y)
    Muchas gracias…..Este código es Muy Útil Para mí.realmente Genial.

    OriginalEl autor Rob

  2. 10

    Utilizar esquema de url para abrir el calendario nativo de la aplicación.

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

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

    hola. la solución funciona perfectamente para iOS 7 pero no su trabajo cuando he probado en un simulador de iOS 6.1. Alguna Sugerencia ?
    No va a funcionar en 6.x simulador de 6.x simulador no tiene un calendario de aplicación. Probar en el dispositivo.

    OriginalEl autor nanjunda

  3. 3

    El código de abajo, ayuda en agregar eventos al calendario nativo.

    - (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;
    }
    Este código funciona para mí

    OriginalEl autor Ramesh Muthe

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea