有没有办法从自定义应用程序将 iCal 事件添加到 iPhone 日历?
根据Apple Documentation,这在 iOS 6.0 中有所改变。
1)您应该通过“requestAccessToEntityType:completion:”请求访问用户的日历并在块内执行事件处理。
2)您需要现在提交您的事件或将“提交”参数传递给您的保存/删除调用
其他一切都保持不变…
将 EventKit 框架和代码添加#import <EventKit/EventKit.h>到您的代码中。
#import <EventKit/EventKit.h>
在我的示例中,我有一个 NSString *savedEventId 实例属性。
要添加事件:
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 }];
删除事件:
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]; } }];
这会将事件添加到您的默认日历中,如果您有多个日历,那么您将找出哪个是
斯威夫特版本
您需要导入 EventKit 框架
import EventKit
添加活动
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 } }
移除事件
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 } } }