2017-03-13 27 views
3

如何將事件添加到用戶的日曆中,但然後允許用戶選擇日曆等。我有此代碼可以工作,但是這會將事件添加到用戶的默認日曆中。我如何讓用戶更改日曆,自定義警報等?我看到其他應用程序打開日曆應用程序並預​​先填寫字段。將事件保存到用戶的日曆

//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: {}) 
        } 
       }) 

回答

7

您可以使用Apple的本機日曆API。在EventKitUI framework中使用EKEventEditViewController,用戶將能夠在保存事件時指定日曆。在斯威夫特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) 
    } 
} 

在雨燕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,你已經requested access

+0

完美的,到底是什麼我在尋找。日曆選項(選擇要保存的日曆)確實出現在模式視圖中。你知道我怎麼能讓這個選項可見嗎? – Prabhu

+0

我不確定你的意思是「讓該選項可見」(因爲你剛纔說日曆選項出現了)。如果設備有多個日曆,它只會顯示爲事件的屬性。如果用戶沒有多個日曆,則不會。還是你說你有一個設備,有多個日曆,並且當事件呈現給用戶進行編輯/添加/取消時,你沒有看到日曆選項? – Rob

+1

我的不好。我正在模擬器上測試。我在設備上進行測試時很好。 – Prabhu

0

Apple沒有本機日曆API。

試試這個第三方存儲庫Calendar。它看起來與iOS calandar應用程序完全相同,並且它也與EKEventStore集成。我在我的項目中使用這個庫沒有任何問題。