2017-11-13 8 views
0

내 롤링 대신 일반 EKEventEditViewController을 사용하려고합니다. 하지만 캘린더 선택에 문제가 있습니다. 컨트롤러 인스턴스에서 캘린더 선택 항목을 볼 수 있으며 그 선택을 보지 않으려합니다. 모든 이벤트를 앱 별 캘린더에 연결하고 싶습니다.특정 캘린더를 EKEventEditViewController 인스턴스에 연결하는 방법

이 방법이 있습니까?

는 지금, 나는 EKEventEditViewController를 호출하고있어 다음과 같이

@IBAction func addEventTapped(_ sender: UIButton) { 

    // create an instance of EKEventEditViewController() 
    let eventViewController: EKEventEditViewController = EKEventEditViewController() 

    let calendars = eventStore.calendars(for: EKEntityType.event) 

    for calendar in calendars { 
     if calendar.title == "MyAppCalendar" { 

      print("calendar is identified") 
      eventViewController.eventStore = self.eventStore 
      eventViewController.eventStore.calendar(withIdentifier: calendar.title) 
     } 
    } 

    eventViewController.editViewDelegate = self 
    self.present(eventViewController, animated: false, completion: nil) 

} 

감사합니다! 내가 AddEventController을 만들어

답변

0

나는 SpaceOTechnologies

에서 EKEventEditViewController

코드는 Andrew Bancroft에서 해제되고 서브 클래스에 의해이 문제를 해결하고 코드는 다음과 같습니다

import UIKit 
import EventKit 
import EventKitUI 

class AddEventViewController: UIViewController, UITextFieldDelegate{ 

    var calendar: EKCalendar! 

    @IBOutlet weak var eventNameTextField: UITextField! 
    @IBOutlet weak var eventStartDatePicker: UIDatePicker! 
    @IBOutlet weak var eventEndDatePicker: UIDatePicker! 

    var delegate: EventAddedDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.eventStartDatePicker.setDate(initialDatePickerValue(), animated: false) 
     self.eventEndDatePicker.setDate(initialDatePickerValue(), animated: false) 


    } 

    func initialDatePickerValue() -> Date { 

     eventNameTextField.resignFirstResponder() 

     let calendarUnitFlags: NSCalendar.Unit = [.year, .month, .day, .hour, .minute, .second] 

     var dateComponents = (Calendar.current as NSCalendar).components(calendarUnitFlags, from: Date()) 

     dateComponents.hour = 0 
     dateComponents.minute = 0 
     dateComponents.second = 0 

     if eventStartDatePicker.isFirstResponder == true { 
      eventStartDatePicker.resignFirstResponder() 
     } 

     if eventEndDatePicker.isFirstResponder == true { 
      eventEndDatePicker.resignFirstResponder() 
     } 
     return Calendar.current.date(from: dateComponents)! 
    } 

    @IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) { 
     self.dismiss(animated: true, completion: nil) 
    } 

    @IBAction func addEventButtonTapped(_ sender: UIBarButtonItem) { 
     // Create an Event Store instance 
     let eventStore = EKEventStore() 

     let calendars = eventStore.calendars(for: EKEntityType.event) 
     for calendar in calendars { 
      if calendar.title == "PhotoBase" { 
       let newEvent = EKEvent(eventStore: eventStore) 

       newEvent.calendar = calendar 
       newEvent.title = self.eventNameTextField.text ?? "Some Event Name" 
       newEvent.startDate = self.eventStartDatePicker.date 
       newEvent.endDate = self.eventEndDatePicker.date 
       // Save the event using the Event Store instance 
       do { 
        try eventStore.save(newEvent, span: .thisEvent, commit: true) 
        delegate?.eventDidAdd() 

        self.dismiss(animated: true, completion: nil) 
       } catch { 
        let alert = UIAlertController(title: "Event could not save", message: (error as NSError).localizedDescription, preferredStyle: .alert) 
        let OKAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
        alert.addAction(OKAction) 

        self.present(alert, animated: true, completion: nil) 
       } 
      } 
     } 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     eventNameTextField.resignFirstResponder() 
    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     print(#file, #function) 
     textField.resignFirstResponder(); 
     return true; 
    } 

나는 개선에 열려있어!