13

I would like to allow my users to accept/decline a meeting invitation within my app.

I think what I need is to update somehow the EKParticipantStatus but it looks like it isn't possible to update.

Apple Docs: Event Kit cannot add participants to an event nor change participant information

In this stackOverflow question someone suggested to bring the native EventKitUI, which I've tried like this:

  class CalendarViewController: UIViewController, EKEventViewDelegate {

        // .....

        let eventController = EKEventViewController()
        guard let eventWithIdentifier = MeetingsFetcher.eventStoreClass.event(withIdentifier: meeting.UUID) else {
            return nil
        }
        eventController.delegate = self
        eventController.event = eventWithIdentifier
        eventController.allowsEditing = true
        eventController.allowsCalendarPreview = true

        let navCon = UINavigationController(rootViewController: eventController)

        // customizing the toolbar where the accept/maybe/decline buttons appear
        navCon.toolbar.isTranslucent = false
        navCon.toolbar.tintColor = .blueGreen
        navCon.toolbar.backgroundColor = .coolWhite10

        // customizing the nav bar where the OK button appears
        navCon.navigationBar.callinAppearence()
        present(navCon, animated: true, completion: nil)

        // .....

        // view gets dismissed, so it does detects the action, but no effect
        func eventViewController(_ controller: EKEventViewController, didCompleteWith action: EKEventViewAction) {
              controller.dismiss(animated: true, completion: nil)
        }

The native UI shows pretty good but the buttons don't make any effect in the native calendar.

enter image description here

Am I missing something or it's just not possible? Why would they allow to interact with those buttons if it's not possible to save anything?

Thank you!

PD: I have these permissions in the info.plist:

  • Privacy - Calendars Usage Description
  • Privacy - Contacts Usage Description
  • Privacy - Reminders Usage Description

UPDATE:

Please note that EKEventEditViewController is not what I am looking for. This screen wouldn't allow me to accept or decline the event, it would only allow me to edit the details.

enter image description here

PMT
  • 1,082
  • 8
  • 18

1 Answers1

0

To allow the user to create, edit, or delete events, use the EKEventEditViewDelegate protocol.

let eventController = EKEventViewController()
guard let eventWithIdentifier = MeetingsFetcher.eventStoreClass.event(withIdentifier: meeting.UUID) else {
                return nil
            }
eventController.delegate = self
eventController.event = eventWithIdentifier
eventController.editViewDelegate = self
...

CalendarViewController class must conform to the EKEventEditViewDelegate protocol and must implement the eventEditViewController method to dismiss the modal view controller as shown below:

func eventEditViewController(_ controller: EKEventEditViewController, 
             didCompleteWith action: EKEventEditViewAction) {

    switch (action) {
        case EKEventEditViewActionCanceled:
        case EKEventEditViewActionSaved:
        ...
    }

}
  • Thanks, but this is not was I am looking for. This does not allowed to decline or accept the invitation. Canceled means the user canceled the changes made to the event. It doesn't mean the user declined it. I'll update my answer with a screenshot so you can see what I mean. – PMT Jan 09 '18 at 15:15