使用EventKit添加事件和日历

ila*_*lan 2 ios eventkit swift

我需要向用户日历添加一个事件.

所以我得到他所有的日历:

let calendars = store.calendarsForEntityType(EKEntityTypeEvent)
        as [EKCalendar]
Run Code Online (Sandbox Code Playgroud)

我有一些问题:

  1. 我怎么知道添加事件的日历
  2. 我可以向用户显示他所有的日历并让他选择,但在这个列表中我得到[日历,日历,生日,生日]我得到每个日历两次,那么我该采取什么?
  3. 有没有办法添加新的日历来添加事件?

谢谢

Ian*_*Ian 6

要创建新日历,您应该创建它并将ID存储在NSUserDefaults中,以便下次可以检索它.我使用以下函数来获取日历(如果它存在)并创建它,如果它不存在:

func getCalendar() -> EKCalendar? {
    let defaults = NSUserDefaults.standardUserDefaults()

    if let id = defaults.stringForKey("calendarID") {
        return store.calendarWithIdentifier(id)
    } else {
        var calendar = EKCalendar(forEntityType: EKEntityTypeEvent, eventStore: self.store)

        calendar.title = "My New Calendar"
        calendar.CGColor = UIColor.redColor()
        calendar.source = self.store.defaultCalendarForNewEvents.source

        var error: NSError?
        self.store.saveCalendar(calendar, commit: true, error: &error)

        if error == nil {
            defaults.setObject(calendar.calendarIdentifier, forKey: "calendarID")
        }

        return calendar
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您在创建新事件时使用此日历,以便将事件添加到此日历:

func addEvent() {
    var newEvent = EKEvent(eventStore: self.store)
    newEvent.title = someTitle
    newEvent.location = someLocation
    newEvent.startDate = someStartDate
    newEvent.endDate = someEndDate
    newEvent.notes = someMoreInfo
    newEvent.calendar = getCalendar()

    self.store.saveEvent(newEvent, span: EKSpanThisEvent, commit: true, error: nil)
}
Run Code Online (Sandbox Code Playgroud)