有什么方法可以从自定义应用程序向 iPhone 日历添加 iCal 事件吗?
最佳答案
基于 Apple Documentation ,从 iOS 6.0 开始,这发生了一些变化。
1) 您应该通过“requestAccessToEntityType:completion:”请求访问用户的日历,并在 block 内执行事件处理。
2) 您需要立即提交您的事件或将“提交”参数传递给您的保存/删除调用
其他一切都保持不变......
添加 EventKit 框架和 #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];
}
}];
这会将事件添加到您的默认日历中,如果您有多个日历,那么您将找出哪个是
Swift 版本
需要导入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
}
}
}
关于ios - 以编程方式在 iPhone 日历中添加自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/246249/