184 votes

Ajouter par programme des événements personnalisés dans l’iPhone calendrier

Est-il possible d'ajouter un événement iCal au calendrier iPhone à partir de l'application personnalisée?

168voto

William T. Points 1879

Basé sur la Documentation d'Apple, cela a changé un peu comme de l'iOS 6.0.

1) Vous devez demander l'accès au calendrier de l'utilisateur via "requestAccessToEntityType:fin:" et exécuter la gestion des événements à l'intérieur d'un bloc.

2) vous devez Vous engager votre événement ou de passer le "commit" param votre enregistrer/supprimer un appel

Tout le reste reste le même...

Ajouter le EventKit cadre et #import <EventKit/EventKit.h> de votre code.

Pour ajouter un événement:

    EKEventStore *store = [[EKEventStore alloc] init];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = @"Event Title";
        event.startDate = [NSDate date]; //today
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
        [event setCalendar:[store defaultCalendarForNewEvents]];
        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
        NSString *savedEventId = event.eventIdentifier;  //this is so you can access this event later
    }];

Supprimer l'événement:

    EKEventStore* store = [[EKEventStore alloc] init];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent* eventToRemove = [store eventWithIdentifier:savedEventId];
        if (eventToRemove) {
            NSError* error = nil;
            [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
        }
    }];

Note: Techniquement, l'ancien code devrait fonctionner, mais sera probablement obsolète au plus tard versions de système d'exploitation.

153voto

Tristan Points 2331

Vous pouvez le faire en utilisant le cadre du kit d'événements dans OS 4.0.

Faites un clic droit sur le groupe FrameWorks dans le navigateur de groupes et de fichiers sur la gauche de la fenêtre. Sélectionnez «Ajouter» puis «Frameworks existants» puis «EventKit.Framework».

Ensuite, vous devriez être capable d'ajouter des événements avec du code comme ceci:

 #import "EventTestViewController.h"
#import <EventKit/EventKit.h>

@implementation EventTestViewController

- (void)viewDidLoad {
    [super viewDidLoad];

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

    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
    event.title     = @"EVENT TITLE";

    event.startDate = [[NSDate alloc] init];
    event.endDate   = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];

    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
    NSError *err;
    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];       
}

@end
 

13voto

keremk Points 2043

Oui, il n'y a toujours pas d'API pour cela (2.1). Mais il semblait qu'à la WWDC beaucoup de gens étaient déjà intéressés par la fonctionnalité (y compris moi-même) et la recommandation était d'aller sur le site ci-dessous et de créer une demande de fonctionnalité pour cela. S'il y a suffisamment d'intérêt, ils pourraient finir par déplacer ICal.framework vers le SDK public.

https://developer.apple.com/bugreporter/

12voto

Chris S Points 32376

L'accès au calendrier est en cours d'ajout dans iPhone OS 4.0 :

Accès au calendrier
Les applications peuvent désormais créer et modifier des événements directement dans l'application Calendrier avec Event Kit.
Créez des événements récurrents, définissez les heures de début et de fin et affectez-les à n'importe quel calendrier sur l'appareil.

5voto

Iggy Points 1277

Vous pouvez ajouter l'événement en utilisant l'API événementielle comme Tristan l'a souligné et vous pouvez également ajouter un événement Google Agenda qui apparaît dans le calendrier iOS.

en utilisant le client API Objective-C de Google

   - (void)addAnEvent {
  // Make a new event, and show it to the user to edit
  GTLCalendarEvent *newEvent = [GTLCalendarEvent object];
  newEvent.summary = @"Sample Added Event";
  newEvent.descriptionProperty = @"Description of sample added event";

  // We'll set the start time to now, and the end time to an hour from now,
  // with a reminder 10 minutes before
  NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
  GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
                                                    timeZone:[NSTimeZone systemTimeZone]];
  GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
                                                  timeZone:[NSTimeZone systemTimeZone]];

  newEvent.start = [GTLCalendarEventDateTime object];
  newEvent.start.dateTime = startDateTime;

  newEvent.end = [GTLCalendarEventDateTime object];
  newEvent.end.dateTime = endDateTime;

  GTLCalendarEventReminder *reminder = [GTLCalendarEventReminder object];
  reminder.minutes = [NSNumber numberWithInteger:10];
  reminder.method = @"email";

  newEvent.reminders = [GTLCalendarEventReminders object];
  newEvent.reminders.overrides = [NSArray arrayWithObject:reminder];
  newEvent.reminders.useDefault = [NSNumber numberWithBool:NO];

  // Display the event edit dialog
  EditEventWindowController *controller = [[[EditEventWindowController alloc] init] autorelease];
  [controller runModalForWindow:[self window]
                          event:newEvent
              completionHandler:^(NSInteger returnCode, GTLCalendarEvent *event) {
                // Callback
                if (returnCode == NSOKButton) {
                  [self addEvent:event];
                }
              }];
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X