我知道这也可能晚了,但至少它适用于 Swift 而不是 ObjC。我创建了两个函数,一个在底部创建 Date 事件,另一个创建名为 addEventToCalendar 的重复事件。请注意,您仍然需要明确具体事件是一周中的哪一天。
如果您对活动的运作方式仍有疑问,我建议您咨询this link。
func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil){
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = title
event.startDate = startDate
event.endDate = startDate
event.notes = description
event.calendar = eventStore.defaultCalendarForNewEvents
let recurrenceRule = EKRecurrenceRule.init(
recurrenceWith: .daily,
interval: 1,
daysOfTheWeek: [EKRecurrenceDayOfWeek.init(EKWeekday.saturday)],
daysOfTheMonth: nil,
monthsOfTheYear: nil,
weeksOfTheYear: nil,
daysOfTheYear: nil,
setPositions: nil,
end: EKRecurrenceEnd.init(end:endDate)
)
event.recurrenceRules = [recurrenceRule]
do {
try eventStore.save(event, span: .thisEvent)
} catch let e as NSError {
completion?(false, e)
return
}
completion?(true, nil)
} else {
completion?(false, error as NSError?)
}
})
}
private func createDate(date: String!, hours: Int!, minutes:Int! ) -> Date{
var fullDateArr = date.components(separatedBy: "-")
let startMonth: Int? = Int(fullDateArr[0])!
let startDay: Int? = Int(fullDateArr[1])!
let startYear: Int = Int(fullDateArr[2])!
var dateComponents = DateComponents()
dateComponents.year = startYear
dateComponents.month = startMonth
dateComponents.day = startDay
dateComponents.timeZone = TimeZone(abbreviation: "MDT") // ELP Standard Time
dateComponents.hour = hours
dateComponents.minute = minutes
let userCalendar = Calendar.current // user calendar
let someDateTime = userCalendar.date(from: dateComponents)
return someDateTime!
}