2017-11-13 11 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) 

} 

感謝を!

答えて

0

私は、あるコードがAndrew Bancroftから持ち上げとSpaceOTechnologies

から私はAddEventControllerと、コードを作成しましたEKEventEditViewController

をサブクラス化することによって、これを解決:

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

私は改善に開いています!

関連する問題