ver sincronizar puedo porque otro mis los guarda eventos contactos con como calendario añadir aparecen iphone calendar

sincronizar - Agregue programáticamente evento personalizado en el calendario de iPhone



sincronizar calendario iphone con outlook (10)

¿Hay alguna manera de agregar el evento de iCal al calendario de iPhone desde la aplicación personalizada?


Actualización para swift 4 para la respuesta de Dashrath

import UIKit import EventKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let eventStore = EKEventStore() eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in if (granted) && (error == nil) { let event = EKEvent(eventStore: eventStore) event.title = "My Event" event.startDate = Date(timeIntervalSinceNow: TimeInterval()) event.endDate = Date(timeIntervalSinceNow: TimeInterval()) event.notes = "Yeah!!!" event.calendar = eventStore.defaultCalendarForNewEvents var event_id = "" do{ try eventStore.save(event, span: .thisEvent) event_id = event.eventIdentifier } catch let error as NSError { print("json error: /(error.localizedDescription)") } if(event_id != ""){ print("event added !") } } }) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

también no olvides agregar el permiso para el uso del calendario


Implementación de Swift 4.0:

use la importación en la parte superior de la página import EventKit

entonces

@IBAction func addtoCalendarClicked(sender: AnyObject) { let eventStore = EKEventStore() eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in if (granted) && (error == nil) { print("granted /(granted)") print("error /(error)") let event = EKEvent(eventStore: eventStore) event.title = "Event Title" event.startDate = Date() event.endDate = Date() event.notes = "Event Details Here" event.calendar = eventStore.defaultCalendarForNewEvents var event_id = "" do { try eventStore.save(event, span: .thisEvent) event_id = event.eventIdentifier } catch let error as NSError { print("json error: /(error.localizedDescription)") } if(event_id != ""){ print("event added !") } } }) }


La idea de Google es buena, pero tiene problemas.

Puedo abrir con éxito una pantalla de evento del calendario de Google, pero solo en la versión principal del escritorio, y no se muestra correctamente en iPhone Safari. El calendario móvil de Google, que se muestra correctamente en Safari, no parece funcionar con la API para agregar eventos.

Por el momento, no veo una buena salida para este.


Puede agregar el evento usando la API de eventos como Tristan y también puede agregar un evento de Google Calendar que aparece en el calendario de iOS.

utilizando el API Objective-C Client 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]; } }]; }


Puede hacerlo utilizando el marco del Kit de eventos en OS 4.0.

Haga clic derecho en el grupo FrameWorks en el Navegador de Grupos y Archivos a la izquierda de la ventana. Seleccione ''Agregar'', luego ''Matriz de marcos existente'' y luego ''Matriz de eventos. Armazón''.

Entonces deberías poder agregar eventos con código como este:

#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


Recuerde establecer el endDate para el evento creado, es obligatorio.

De lo contrario, fallará (casi en silencio) con este error:

"Error Domain=EKErrorDomain Code=3 "No end date has been set." UserInfo={NSLocalizedDescription=No end date has been set.}"

El código de trabajo completo para mí es:

EKEventStore *store = [EKEventStore new]; [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if (!granted) { return; } EKEvent *calendarEvent = [EKEvent eventWithEventStore:store]; calendarEvent.title = [NSString stringWithFormat:@"CEmprendedor: %@", _event.name]; calendarEvent.startDate = _event.date; // 5 hours of duration, we must add the duration of the event to the API NSDate *endDate = [_event.date dateByAddingTimeInterval:60*60*5]; calendarEvent.endDate = endDate; calendarEvent.calendar = [store defaultCalendarForNewEvents]; NSError *err = nil; [store saveEvent:calendarEvent span:EKSpanThisEvent commit:YES error:&err]; self.savedEventId = calendarEvent.eventIdentifier; //saving the calendar event id to possibly deleted them }];


Sí, todavía no hay API para esto (2.1). Pero parecía que en la WWDC mucha gente ya estaba interesada en la funcionalidad (incluyéndome a mí) y la recomendación era ir al siguiente sitio y crear una solicitud de función para esto. Si hay suficiente interés, podrían terminar moviendo el ICal.framework al SDK público.

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


Según la documentación de Apple , esto ha cambiado un poco desde iOS 6.0.

1) Debe solicitar acceso al calendario del usuario a través de "requestAccessToEntityType: completion:" y ejecutar el manejo de eventos dentro de un bloque.

2) Necesita confirmar su evento ahora o pasar el parámetro "confirmar" a su llamada de guardar / eliminar

Todo lo demás se queda igual...

Agregue el marco de EventKit y # #import <EventKit/EventKit.h> a su código.

En mi ejemplo, tengo una propiedad de instancia NSString * savedEventId.

Para agregar un evento:

EKEventStore *store = [EKEventStore new]; [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.calendar = [store defaultCalendarForNewEvents]; NSError *err = nil; [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; self.savedEventId = event.eventIdentifier; //save the event id if you want to access this later }];

Eliminar el evento:

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

Esto agrega eventos a su calendario predeterminado, si tiene varios calendarios, entonces tendrá que averiguar cuál es

Versión Swift

Necesita importar el marco de EventKit

import EventKit

Añadir evento

let store = EKEventStore() store.requestAccessToEntityType(.Event) {(granted, error) in if !granted { return } var event = EKEvent(eventStore: store) event.title = "Event Title" event.startDate = NSDate() //today event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting event.calendar = store.defaultCalendarForNewEvents do { try store.saveEvent(event, span: .ThisEvent, commit: true) self.savedEventId = event.eventIdentifier //save event id to access this particular event later } catch { // Display error to user } }

Eliminar evento

let store = EKEventStore() store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in if !granted { return } let eventToRemove = store.eventWithIdentifier(self.savedEventId) if eventToRemove != nil { do { try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true) } catch { // Display error to user } } }


Simple ... use la biblioteca de tapku ... puede googlear esa palabra y usarla ... es de código abierto ... disfrute ... no hay necesidad de molestar con esos códigos ...


El acceso al calendario se agrega en iPhone OS 4.0 :

Acceso al calendario
Las aplicaciones ahora pueden crear y editar eventos directamente en la aplicación Calendario con Event Kit.
Cree eventos recurrentes, configure las horas de inicio y finalización y asígnelas a cualquier calendario del dispositivo.