Ios EKEventEditViewController显示一个禁用的添加按钮 问题

Ios EKEventEditViewController显示一个禁用的添加按钮 问题,ios,swift,eventkit,ekevent,Ios,Swift,Eventkit,Ekevent,我正在展示一个带有一些预定义信息的EKEventEditViewController视图。如果用户不想更改此信息,他应该能够点击Add将事件添加到日历中 问题是,“添加”按钮在默认情况下处于禁用状态。仅当用户更改某些内容(例如,事件名称或日历)时,才会启用该功能 代码片段 EKEventEditViewController 以下是如何显示EKEventEditViewController: 还有一件事 我注意到的另一件事是,当我从我的EKEvent对象中删除开始和结束日期时,默认情况下会启用A

我正在展示一个带有一些预定义信息的
EKEventEditViewController
视图。如果用户不想更改此信息,他应该能够点击Add将事件添加到日历中

问题是,“添加”按钮在默认情况下处于禁用状态。仅当用户更改某些内容(例如,事件名称或日历)时,才会启用该功能

代码片段 EKEventEditViewController 以下是如何显示
EKEventEditViewController

还有一件事 我注意到的另一件事是,当我从我的
EKEvent
对象中删除开始和结束日期时,默认情况下会启用Add按钮


如何配置我的
EKEvent
对象,使其具有自定义的开始和结束日期,并在默认情况下启用
EKEventEditViewController
的添加按钮?

这在iOS 13.3 beta版上已修复

在iOS 12.2.x上:显然,EKEventEditViewController将您的事件视为已存在的事件,而不是新事件。因此,禁用添加按钮,因为没有任何更改(Apple bug)

证明这一点的一个小方法是尝试通过删除一个字符来编辑标题,这将启用添加,因为现在它已从原始更改。如果您将刚刚删除的字符放回原处,它将再次禁用“添加”按钮

我们发现的一个解决方法是将EKEventEditViewController子类化,如下所示:

final class FixedEventEditViewController: EKEventEditViewController {
    /// Set this variable instead of the `event` property to avoid a crash on iOS 12+ when a fixed timezone is set
    var deferredEvent: EKEvent?

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if let deferredEvent = self.deferredEvent {
            // Trick iOS into thinking that the event changed so it enables the Add button on iOS 13.2.x -> Fixed starting iOS 13.3
            let titleDeferred = deferredEvent.title
            deferredEvent.title = nil
            // Set the event to the new deferred event that contains no title
            self.event = deferredEvent
            // Set the original title. This will let iOS think the event changed and enable the Add button
            self.event?.title = titleDeferred
        }
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // This is to hide the keyboard
        self.view.endEditing(true)
    }
}
final class FixedEventEditViewController: EKEventEditViewController {
    /// Set this variable instead of the `event` property to avoid a crash on iOS 12+ when a fixed timezone is set
    var deferredEvent: EKEvent?

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if let deferredEvent = self.deferredEvent {
            // Trick iOS into thinking that the event changed so it enables the Add button on iOS 13.2.x -> Fixed starting iOS 13.3
            let titleDeferred = deferredEvent.title
            deferredEvent.title = nil
            // Set the event to the new deferred event that contains no title
            self.event = deferredEvent
            // Set the original title. This will let iOS think the event changed and enable the Add button
            self.event?.title = titleDeferred
        }
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // This is to hide the keyboard
        self.view.endEditing(true)
    }
}