Est-il possible d'ajouter un événement iCal au calendrier iPhone à partir de l'application personnalisée?
Réponses
Trop de publicités?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.
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
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/
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.
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];
}
}];
}