2017-03-13 11 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 frameworkEKEventEditViewController을 사용하면 일정을 저장할 때 사용자가 일정을 지정할 수 있습니다. 스위프트 3 :

스위프트 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 
     present(controller, animated: true) 
    } 
} 

extension ViewController: EKEventEditViewDelegate { 

    func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) { 
     controller.dismiss(animated: true) 
    } 
} 

:

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) 
    } 
} 

이것은 당신이, 당신이 requested access을 했으므로 등

+0

완벽한을, 당신의 Info.plistNSCalendarsUsageDescription를 공급 한 것으로 가정 정확히 나는 찾고 있었다. 캘린더 옵션 (저장할 캘린더 선택)은 모달보기에 표시됩니다. 내가 그 옵션을 어떻게 보이게 할 수 있는지 알고 있니? – Prabhu

+0

"그 옵션을 보이게"하는 것이 무슨 뜻인지 확실하지 않습니다. 기기에 여러 개의 캘린더가있는 경우 이벤트의 속성으로 표시됩니다. 사용자가 여러 개의 캘린더를 가지고 있지 않은 경우, 그렇지 않습니다. 아니면 여러 개의 캘린더가 있고 편집/추가/취소를 위해 이벤트가 사용자에게 표시 될 때 캘린더 옵션을 보지 못하는 장치가 있다고 말하는 것입니까? – Rob

+1

제 잘못입니다. 나는 시뮬레이터에서 테스트를하고 있었다. 기기에서 테스트했을 때 괜찮습니다. – Prabhu

0

Apple에는 기본 달력 API가 없습니다.

이 타사 라이브러리 Calendar을 사용해보세요. iOS calandar 앱과 완전히 동일하게 보이며 EKEventStore와도 통합됩니다. 나는이 프로젝트를 아무런 문제없이이 라이브러리를 사용했다.