将事件保存到用户的日历
如何将事件添加到用户的日历中,然后允许用户选择日历等。我有这个代码可以工作,但这会将事件添加到用户的默认日历。 如何允许用户更改日历,自定义警报等? 我见过其他应用程序打开日历应用程序并预先填写字段。
//add to calendar let eventStore : EKEventStore = EKEventStore() eventStore.requestAccessToEntityType(EKEntityType.Event, completion: { (granted, error) in if granted && error == nil { let event:EKEvent = EKEvent(eventStore: eventStore) event.title = "My event: " + self.event.name event.startDate = self.event.startTime event.endDate = self.event.endTime event.notes = self.event.description event.calendar = eventStore.defaultCalendarForNewEvents do { try eventStore.saveEvent(event, span: .ThisEvent, commit: true) self.dismissViewControllerAnimated(true, completion: {}) } catch { self.dismissViewControllerAnimated(true, completion: {}) } } else { self.dismissViewControllerAnimated(true, completion: {}) } })
您可以使用Apple的本机日历API。 在EventKitUI框架中使用EKEventEditViewController
,用户可以在保存事件时指定日历。 在Swift 3中:
import UIKit import EventKit import EventKitUI class ViewController: UIViewController { let store = EKEventStore() func createEvent() { // create the event object let event = EKEvent(eventStore: store) event.title = "Foo" event.startDate = ... event.endDate = ... // prompt user to add event (to whatever calendar they want) let controller = EKEventEditViewController() controller.event = event controller.eventStore = store controller.editViewDelegate = self present(controller, animated: true) } } extension ViewController: EKEventEditViewDelegate { func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) { controller.dismiss(animated: true) } }
在Swift 2.3中:
import UIKit import EventKit import EventKitUI class ViewController: UIViewController { let store = EKEventStore() func createEvent() { // create the event object let event = EKEvent(eventStore: store) event.title = "Foo" event.startDate = ... event.endDate = ... // prompt user to add event (to whatever calendar they want) let controller = EKEventEditViewController() controller.event = event controller.eventStore = store controller.editViewDelegate = self presentViewController(controller, animated: true, completion: nil) } } extension ViewController: EKEventEditViewDelegate { func eventEditViewController(controller: EKEventEditViewController, didCompleteWithAction action: EKEventEditViewAction) { controller.dismissViewControllerAnimated(true, completion: nil) } }
这假设您已在Info.plist
提供了NSCalendarsUsageDescription
,您已请求访问等。
Apple没有本机日历API。
试试这个第三方库日历 。 它看起来与iOS calandar应用程序完全相同,并且它也与EKEventStore集成。 我在我的项目中使用过这个库没有任何问题。
- 正确的方式来检索FCM的令牌 – iOS 10 Swift 3
- 在没有开发人员帐户的情况下,使用iOS模拟器尝试HealthKit
- NSDiction的NSArray – 合并具有相同键值对的字典
- 在Swift 2.2+中使用AnyGenerator(“for in”循环支持自定义类)
- UITableViewController无法识别select器发送到实例
- 在iOS 9中禁用应用内浏览器的ATS?
- canOpenUrl失败“org-appextension-feature-password-management”(PayPal)
- 在Mapbox iOS SDK上dynamic更改MGLPointAnnotation图像
- iPhone“滑动解锁”animation