Gibt es eine Möglichkeit, iCal-Ereignisse über die benutzerdefinierte App zum iPhone-Kalender hinzuzufügen?
Basierend auf der Apple-Dokumentation hat sich dies ab iOS 6.0 etwas geändert.
1) Sie sollten über "requestAccessToEntityType: finish:" den Zugriff auf den Kalender des Benutzers anfordern und die Ereignisbehandlung innerhalb eines Blocks ausführen.
2) Sie müssen Ihr Ereignis jetzt festschreiben oder den Parameter "Festschreiben" an Ihren Aufruf zum Speichern / Entfernen übergeben
Alles andere bleibt gleich ...
Fügen Sie das EventKit-Framework und #import <EventKit/EventKit.h>
Ihren Code hinzu.
In meinem Beispiel habe ich eine NSString * savedEventId-Instanzeigenschaft.
So fügen Sie ein Ereignis hinzu:
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
}];
Entfernen Sie das Ereignis:
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];
}
}];
Dadurch werden Ihrem Standardkalender Ereignisse hinzugefügt. Wenn Sie mehrere Kalender haben, müssen Sie herausfinden, um welchen es sich handelt
Schnelle Version
Sie müssen das EventKit-Framework importieren
import EventKit
Ereignis hinzufügen
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
}
}
Ereignis entfernen
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
}
}
}
Sie können dies mit dem Event Kit-Framework in OS 4.0 tun.
Klicken Sie im Gruppen- und Dateinavigator links im Fenster mit der rechten Maustaste auf die FrameWorks-Gruppe. Wählen Sie "Hinzufügen", dann "Vorhandene FrameWorks" und dann "EventKit.Framework".
Dann sollten Sie in der Lage sein, Ereignisse mit folgendem Code hinzuzufügen:
quelle
Ja, dafür gibt es noch keine API (2.1). Aber es schien, als ob bei WWDC viele Leute bereits an der Funktionalität interessiert waren (einschließlich meiner selbst) und die Empfehlung war, auf die unten stehende Site zu gehen und eine Feature-Anfrage dafür zu erstellen. Wenn genügend Interesse besteht, wird das ICal.framework möglicherweise in das öffentliche SDK verschoben.
https://developer.apple.com/bugreporter/
quelle
Der Kalenderzugriff wird in iPhone OS 4.0 hinzugefügt :
quelle
Sie können das Ereignis mithilfe der Ereignis-API wie in Tristan beschrieben hinzufügen und ein Google Kalender-Ereignis hinzufügen, das im iOS-Kalender angezeigt wird.
Verwenden des API Objective-C-Clients von Google
quelle
Schnelle 4.0-Implementierung:
Verwenden Sie den Import oben auf der Seite von
import EventKit
dann
quelle
Update für Swift 4 für Dashrath Antwort
Vergessen Sie auch nicht, die Berechtigung zur Verwendung des Kalenders hinzuzufügen
quelle
Arbeitscode in Swift-4.2
Jetzt erhalten wir den Ereignisbildschirm und hier können Sie auch Ihre Einstellungen ändern:
Fügen Sie nun die Delegatenmethode hinzu, um Abbrechen zu behandeln, und fügen Sie die Ereignisschaltflächenaktion des Ereignisbildschirms hinzu:
Hinweis: Vergessen Sie nicht, den NSCalendarsUsageDescription- Schlüssel zur Info- Liste hinzuzufügen .
quelle
Denken Sie daran, das endDate auf das erstellte Ereignis festzulegen. Dies ist obligatorisch.
Andernfalls schlägt es (fast lautlos) mit diesem Fehler fehl:
Der vollständige Arbeitscode für mich lautet:
quelle
Die Google-Idee ist nett, hat aber Probleme.
Ich kann einen Google Kalender-Ereignisbildschirm erfolgreich öffnen - jedoch nur auf der Haupt-Desktop-Version, und er wird auf dem iPhone Safari nicht richtig angezeigt. Der mobile Google-Kalender, der in Safari ordnungsgemäß angezeigt wird, scheint nicht mit der API zum Hinzufügen von Ereignissen zu funktionieren.
Im Moment sehe ich keinen guten Ausweg aus diesem.
quelle
Einfach ... benutze die Tapku-Bibliothek ... du kannst dieses Wort googeln und es benutzen ... seine Open Source ... genieße ... keine Notwendigkeit, mit diesen Codes zu nerven ...
quelle