¿Hay alguna forma de agregar el evento iCal al Calendario de iPhone desde la aplicación personalizada?
181
Según la documentación de Apple , esto ha cambiado un poco a partir de iOS 6.0.
1) Debe solicitar acceso al calendario del usuario a través de "requestAccessToEntityType: completar:" y ejecutar el manejo de eventos dentro de un bloque.
2) Debe confirmar su evento ahora o pasar el parámetro "commit" a su llamada de guardar / eliminar
Todo lo demás se queda igual...
Agregue el marco EventKit y #import <EventKit/EventKit.h>
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, tendrá que averiguar cuál es
Versión rápida
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
}
}
}
Puede hacerlo utilizando el marco de Event Kit 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' y luego 'FrameWorks existentes' y luego 'EventKit.Framework'.
Entonces debería poder agregar eventos con código como este:
fuente
Sí, todavía no hay API para esto (2.1). Pero parecía que en WWDC mucha gente ya estaba interesada en la funcionalidad (incluido yo mismo) y la recomendación era ir al sitio a continuación 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/
fuente
Se agrega acceso al calendario en iPhone OS 4.0 :
fuente
Puede agregar el evento utilizando la API de eventos como Tristan describió y también puede agregar un evento de Google Calendar que aparece en el calendario de iOS.
utilizando el cliente API Objective-C de Google
fuente
Implementación de Swift 4.0:
utilizar importación en la parte superior de la página por
import EventKit
luego
fuente
Actualización para swift 4 para la respuesta Dashrath
tampoco olvides agregar permiso para el uso del calendario
fuente
Código de trabajo en Swift-4.2
Ahora obtendremos la pantalla del evento y aquí también puede modificar su configuración:
Ahora agregue el método delegado para manejar Cancelar y agregue la acción del botón de evento de la pantalla de eventos:
Nota: No olvide agregar la clave NSCalendarsUsageDescription en la lista de información.
fuente
Recuerde configurar endDate para el evento creado, es obligatorio.
De lo contrario, fallará (casi en silencio) con este error:
El código de trabajo completo para mí es:
fuente
La idea de Google es buena, pero tiene problemas.
Puedo abrir con éxito una pantalla de eventos de calendario de Google, pero solo en la versión de escritorio principal, y no se muestra correctamente en el 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 puedo ver una buena salida de este.
fuente
Simple ... use la biblioteca tapku ... puede buscar esa palabra en Google y usarla ... es de código abierto ... disfrute ... no necesita molestarse con esos códigos ...
fuente