¿Hay alguna forma de agregar el evento de iCal al calendario de iPhone desde la aplicación personalizada?Agregar evento personalizado mediante programación en el calendario de iPhone
Respuesta
Basado en Apple Documentation, 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) que necesita confirmar su evento ahora o pasar la "comprometerse" parámetro a la llamada guardar/eliminar
Todo lo demás se mantiene igual ...
Añadir el marco 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 añade eventos a su calendario predeterminado, si tiene varios calendarios entonces usted tendrá que averiguar cuál de que es
versión Swift
Es necesario importar el marco 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
}
}
caso Quitar
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
}
}
}
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.
respuesta está desactualizada, considere eliminar este – Jasper
La idea de Google es un bonito, pero tiene problemas.
Puedo abrir con éxito una pantalla de evento de calendario de Google, pero solo en la versión de escritorio principal, 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.
Calendar access is being added in iPhone OS 4.0:
Calendar Access
Apps can now create and edit events directly in the Calendar app with Event Kit.
Create recurring events, set up start and end times and assign them to any calendar on the device.
su enlace está roto ahora. –
Usted puede hacer esto utilizando el 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 usted debe ser capaz de añadir 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
Gracias por publicar esto. Solo un recordatorio para todos los que lean esto: tengan cuidado de ver si hay pérdidas de memoria. Hay un par en este ejemplo de código. Además, las mejores prácticas dictarían que verifique el valor de 'err' después de saveEvent: span: error y que maneje las cosas como corresponda. –
¿Sabes cómo agregar el evento recurrencia? como un evento para cada lunes? –
Agregue el evento de recurrencia mediante programación: revise esto http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKRecurrenceRuleClassRef/Reference/Reference.html#//apple_ref/doc/c_ref/EKRecurrenceRule. Otra opción es usar los controladores de vista provistos por el marco por defecto para agregar/editar eventos (como la aplicación de vista previa de calendario http://bit.ly/cJq4Bh). Para obtener esta opción, consulte http://developer.apple.com/library/ios/#documentation/EventKitUI/Reference/EKEventEditViewControllerClassRef/Reference/Reference.html – DenTheMan
Puede añadir el evento mediante la API de eventos como Tristán esbozó y también se puede añadir un evento de Google Calendar que se muestra en el calendario de iOS.
usando Google's API Objective-C Client
- (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];
}
}];
}
simple .... utilización tapku biblioteca .... usted puede buscar en Google la palabra y utilizarla ... su fuente abierta ... disfrutar ..... hay necesidad de molestar con esos códigos ...
https://developer.apple.com/library/ios/# documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html # // apple_ref/doc/uid/TP40009765 –
Calendario de la biblioteca Can Tapku sincronizar con eventos de la aplicación de calendario – coder1010
Todo lo que sé es que la biblioteca Tapku es una control de componente de calendario que tiene una opción llamada Fuente de datos. Por lo tanto, es lógico escribir la fuente de donde está obteniendo ... Happy Coding :) –
Swift 4.0 aplicación:
uso de importaciones en la parte superior de la página por import EventKit
continuación
@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 !")
}
}
})
}
podría ayudarme con el calendario de google con la misma respuesta @ Dashrath –
Recuerde que debe establecer la endDate al evento creado, es obligatorio.
De lo contrario, se producirá un error (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 completo de trabajo 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
}];
Y también recuerde que la fecha de finalización debe ser igual o mayor que la fecha de inicio. De lo contrario, obtendrá otro error. – moody
actualización para SWIFT 4 para la respuesta 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 se olvide de agregar el permiso para el uso del calendario
- 1. ¿Cómo puedo crear un evento iCal mediante programación en el calendario predeterminado?
- 2. Agregar PageControl mediante programación
- 3. identificando mediante programación el dispositivo iphone
- 4. Enviar SMS desde el iPhone mediante programación
- 5. ¿Cómo agregar datos al calendario de Google mediante programación en android?
- 6. agregar mediante programación gatillo estilo
- 7. ¿Cómo detectar mediante programación el auricular en el iPhone?
- 8. ejecutar mediante programación el evento táctil en android
- 9. Medir el tráfico de red mediante programación en iPhone
- 10. Cómo agregar mediante programación vista en ViewFlipper
- 11. Agregar celdas mediante programación a UITableView
- 12. Agregar DLL mediante programación en el tiempo de ejecución
- 13. Eliminación de un evento del calendario de iPhone
- 14. ¿Cómo detectar mediante programación el interruptor de silenciamiento del iPhone?
- 15. ¿Agregar ScriptManager a la página mediante programación?
- 16. iOS: agregar/eliminar una subvista mediante programación
- 17. Cómo agregar vistas a vistas mediante programación
- 18. Cómo agregar una referencia mediante programación
- 19. WPF ListView: cómo agregar elementos mediante programación.
- 20. Cómo agregar un atributo mediante programación
- 21. Agregar controles mediante programación al formulario WPF
- 22. C# Visual Studio ... agregar referencias mediante programación
- 23. Agregar reglas de resaltado de sintaxis a AvalonEdit mediante programación
- 24. ¿Cómo agregar imágenes para verlas mediante programación?
- 25. Cómo agregar/quitar la referencia mediante programación?
- 26. Agregar recursos a Jetty mediante programación
- 27. Agregar un nuevo usuario de subversión mediante programación con C#
- 28. Agregar botones mediante programación a un fragmento
- 29. Agregar notificación de inserción de iPhone mediante el servidor ASP.NET
- 30. UINavigationBar - ¿Establecer el título mediante programación? iPhone SDK 4
no funciona para mí, todo va sin errores pero no hay evento en el calendario –
Todo se almacena en el objeto ekevent pero no se almacena dentro del calendario hlp mí –
@William T: ¿Puedo presentar la pantalla Agregar evento de la aplicación Calendario (usando el esquema URL) y pasar la información del evento para que cuando aparezca la pantalla Agregar evento, tenga datos previamente rellenos. El usuario solo necesita presionar el botón Agregar evento. En su ejemplo de evento agregado sin ninguna indicación al usuario. – Ans