- 我将一个事件设置为某个月的 13 号,并每月重复一次。每个月都会正确地重复它。 但是,当将其设置为某个月的 31 日时,它只会设置为 31 日的月份,并且如果它显示在“编辑”->“重复”->“每月重复”中,每个月的 31 日。
- 如果该月没有可用的 31 日日期,我希望至少将其设置为该月的最后一天。
- 此外,对于 2 月 29 日、30 日或 31 日,也不会创建具有这些日期的其他月份的事件。
请注意,我们希望设置连续的事件集,以便轻松删除和编辑它们。
我编写了以下代码:
let eventstore : EKEventStore = EKEventStore()
eventstore.requestAccess(to: EKEntityType.event, completion: { (isallow, error) -> Void in
var event:EKEvent!
if (event == nil) {
event = EKEvent(eventStore: eventstore)
event.title = self.getReminderTitleForCalendarEvent(dtDate: date)
event.notes = ""
event.startDate = date
event.endDate = date
event.calendar = eventstore.defaultCalendarForNewEvents
let ekrules: EKRecurrenceRule = EKRecurrenceRule.init(recurrenceWith: EKRecurrenceFrequency.monthly, interval:self.selectedFrequency!, end: nil)
event.recurrenceRules = [ekrules]
}
else // if there is already a event then update date
{
// if event is deleted by user
event.startDate = date
event.endDate = date
if let oldalarm = event.alarms?[0]// remove old date alarm
{
event.removeAlarm(oldalarm)
}
// Below code is to remove existing event
do
{
try eventstore.remove(event, span: .thisEvent)
//self.objselectedinfusion.strEventId = event.eventIdentifier
}
catch let error as NSError {
//print(error.localizedDescription)
}
}
let alarm = EKAlarm(relativeOffset: self.getTimeIntervalForAlert())
let alarm = EKAlarm(absoluteDate: reminderFireDate as Date)
event.addAlarm(alarm)
do
{
try eventstore.save(event, span: EKSpan.futureEvents, commit: true)
UserDefaults.standard.set(event.eventIdentifier, forKey: Constant.calendarEventID)
}
catch let error as NSError {
//print(error.localizedDescription)
}
})
这里selectedFrequency
是重复间隔,是一些月数。
最佳答案
class func getRepeatValue (_ option : String) -> EKRecurrenceRule?{
// ["Daily" , "Weekly" , "Monthly" ,"Yearly","None"]
// "daily" , "weekly" , "monthly" ,"yearly","none"
switch option {
case "Daily":
let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.daily, interval: 1, end: nil)
//daily for 50 years
return rule
case "Weekly":
//on the same week day for 50 years
let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.weekly, interval: 1, end: nil)
return rule
case "Monthly":
//on the same date of every month
let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.monthly, interval: 1, end: nil)
return rule
case "Yearly":
//on the same date and month of the year
let rule = EKRecurrenceRule(recurrenceWith: EKRecurrenceFrequency.yearly, interval: 1, end: nil)
return rule
case "None":
return nil
default:
return nil
}
}
关于ios - 设置事件 "repeats every month"的重复发生而不是 "repeats every month, each 31st"ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44625884/