The problem
I'm presenting a EKEventEditViewController
view with some predefined information. If the user doesn't want to change this information, he should be able to tap Add to add the event to the calendar.
The problem is, the Add button is disabled by default. It is only enabled if the user changes something (like the event name or the Calendar, for example).
Snippet of code
class EventManager {
private var eventEditViewController: EKEventEditViewController?
private let eventStore = EKEventStore()
func addToCalendar(_ eventData: EventData) {
let event = createEvent(eventData)
presentEvent(event)
}
private func createEvent(_ eventData: EventData) -> EKEvent {
let event = EKEvent(eventStore: eventStore)
event.title = "My event"
event.startDate = Date()
event.endDate = Date()
event.isAllDay = true
event.calendar = eventStore.defaultCalendarForNewEvents
event.availability = .free
event.addAlarm(EKAlarm.init(absoluteDate: event.startDate))
event.url = URL(string: "http://myurl.com/")
return event
}
private func presentEvent(_ event: EKEvent) {
DispatchQueue.main.async {
self.eventEditViewController = EKEventEditViewController()
self.eventEditViewController!.eventStore = self.eventStore
self.eventEditViewController!.event = event
self.eventEditViewController!.editViewDelegate = self
self.viewController?.present(self.eventEditViewController!, animated: true)
}
}
}
extension EventManager: EKEventEditViewDelegate {
func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {
eventEditViewController?.dismiss(animated: true, completion: {
self.delegate.finish(result: CalendarResult.fromAction(action))
})
}
}
EKEventEditViewController
Here's how the EKEventEditViewController
is presented:
One more thing
Another thing I've noticed is that when I remove the start and end date from my EKEvent
object, the Add button is enabled by default.
How can I configure my EKEvent
object, in a way that it has a custom start and end date, and at the same time enable the Add button of EKEventEditViewController
by default?