我如何在点击 "Add" 或 "Cancel" 按钮后关闭 EKEventEditViewController
How do I get the EKEventEditViewController to dismiss after tapping "Add" or "Cancel" buttons
我有一个应用程序可以使用 Swift 中的 EKEventEditViewController 向用户日历添加事件。一切都像它应该的那样工作,除了 editViewController 在单击导航栏中的一个按钮后不会关闭。 "Add" 按钮确实保存了事件,我只是无法返回到另一个视图。
这是我在按钮操作中的代码。我正在从之前在应用程序中创建的对象中提取数据。
@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
}
}
我从另一个 Whosebug 问题 here 得到了这段代码,并且除了 self.setNavBarAppearanceStandard()
行之外的所有代码都可以正常工作,所以我提交了它们。
所以任何帮助都会很棒。
您的委托设置不正确。
完全删除 "var editViewDelegate" 。
添加
EKEventEditViewDelegate
到你的 class(在 UIViewController 后面放一个“,”并输入它)并编写这个函数:
func eventEditViewController(controller: EKEventEditViewController,
didCompleteWithAction action: EKEventEditViewAction){
self.dismissViewControllerAnimated(true, completion: nil)
}
这是委托的协议函数。
最后,改变这个:
eventController.editViewDelegate = editViewDelegate
至:
eventController.editViewDelegate = self
就是这样!
我有一个应用程序可以使用 Swift 中的 EKEventEditViewController 向用户日历添加事件。一切都像它应该的那样工作,除了 editViewController 在单击导航栏中的一个按钮后不会关闭。 "Add" 按钮确实保存了事件,我只是无法返回到另一个视图。
这是我在按钮操作中的代码。我正在从之前在应用程序中创建的对象中提取数据。
@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
}
}
我从另一个 Whosebug 问题 here 得到了这段代码,并且除了 self.setNavBarAppearanceStandard()
行之外的所有代码都可以正常工作,所以我提交了它们。
所以任何帮助都会很棒。
您的委托设置不正确。 完全删除 "var editViewDelegate" 。 添加
EKEventEditViewDelegate
到你的 class(在 UIViewController 后面放一个“,”并输入它)并编写这个函数:
func eventEditViewController(controller: EKEventEditViewController,
didCompleteWithAction action: EKEventEditViewAction){
self.dismissViewControllerAnimated(true, completion: nil)
}
这是委托的协议函数。 最后,改变这个:
eventController.editViewDelegate = editViewDelegate
至:
eventController.editViewDelegate = self
就是这样!