点击“添加”或“取消”按钮后,如何让EKEventEditViewController关闭

时间:2015-07-02 19:54:25

标签: ios swift xcode6 ekevent

我有一个应用程序,它将使用Swift中的EKEventEditViewController将事件添加到用户日历。一切都像它应该的那样工作,除了editViewController在点击导航栏中的一个按钮后不会被忽略。 “添加”按钮确实保存了该事件,我无法回到其他视图。

这是我在按钮操作中的代码。我从之前在应用程序中创建的对象中提取数据。

@IBAction func addToCalendar(sender: AnyObject) {

        var eventController = EKEventEditViewController()
        var editViewDelegate: EKEventEditViewDelegate!
        var store = EKEventStore()
        eventController.eventStore = store
        eventController.editViewDelegate = editViewDelegate
        self.dismissViewControllerAnimated(true, completion: nil)

        var event = EKEvent(eventStore: store)
        event.title = currentEvent?.name
        event.startDate = currentEvent?.startDate
        event.endDate = currentEvent?.endDate
        eventController.event = event

        var status = EKEventStore.authorizationStatusForEntityType(EKEntityTypeEvent)
        switch status {
        case .Authorized:
            //self.setNavBarAppearanceStandard()
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                self.presentViewController(eventController, animated: true, completion: nil)
            })

        case .NotDetermined:
            store.requestAccessToEntityType(EKEntityTypeEvent, completion: { (granted, error) -> Void in
                if granted == true {
                    //self.setNavBarAppearanceStandard()
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.presentViewController(eventController, animated: true, completion: nil)
                    })
                }
            })
        case .Denied, .Restricted:
            UIAlertView(title: "Access Denied", message: "Permission is needed to access the calendar. Go to Settings > Privacy > Calendars to allow access for the Be Collective app.", delegate: nil, cancelButtonTitle: "OK").show()
            return
        }
}

我从另一个stackoverflow问题here获得了这个代码,除了self.setNavBarAppearanceStandard()行之外,所有这些代码都工作了,所以我将它们提交了。

所以对此的任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

您的代理设置不正确。 完全删除“var editViewDelegate”。 添加

  

EKEventEditViewDelegate

到你的类(在UIViewController之后放一个“,”并输入)并编写这个函数:

func eventEditViewController(controller: EKEventEditViewController,
    didCompleteWithAction action: EKEventEditViewAction){
   self.dismissViewControllerAnimated(true, completion: nil)
}

这是代表的协议功能。 最后,改变一下:

eventController.editViewDelegate = editViewDelegate

为:

eventController.editViewDelegate = self

就是这样!