LoginSignup
14
9

More than 5 years have passed since last update.

【swift 4】 EventKit でカレンダーにイベントを保存する。

Last updated at Posted at 2018-12-07

EventKitの使い方 (swift 4)

アプリ内で、ユーザーのカレンダーにイベントを保存する簡単なサンプルを示します。
いくつかのポイントがあります。

ポイントその1

Info.plistに「Privacy - Calendars Usage Description」を + し、"カレンダーに保存"などのコメントを加えます。
CalendarSavePlist.gif

ポイントその2

「import EventKit」を加えます。

ポイントその3

EKEventStore.authorizationStatus(for: .event)
でアプリがカレンダーへアクセス出来るかを調べます。
未確定(== .notDetermined)の場合は、
requestAccess(to: .event
でユーザーに承諾してもらいます。

コード

UITextFieldを「myTextField」、
「保存」ボタンを「hozonButton」とします。
UITextFieldに文字を入力して保存ボタンを押すと、本日のカレンダーにイベントが追加されます。
CalendarSaveSCRN.gif

import UIKit
import EventKit

class ViewController: UIViewController {

    @IBOutlet var myTextField:UITextField!
    @IBOutlet var hozonButton:UIButton!

    let eventStore:EKEventStore = EKEventStore()

    override func viewDidLoad() {
        super.viewDidLoad()
        if EKEventStore.authorizationStatus(for: .event) == .notDetermined{
            eventStore.requestAccess(to: .event, completion: { (granted, error) in
                if granted && error == nil {
                    print("granted")
                }
                else{
                    print("not granted")
                }
            })
        }
    }

    @IBAction func myActionHozon(){
        guard let i = myTextField.text, i != "" else { return }
        if EKEventStore.authorizationStatus(for: .event) == .authorized{
            let event = EKEvent(eventStore: eventStore)
            event.title = i
            event.startDate = Date()
            event.endDate = Date()
            event.isAllDay = true
            event.calendar = eventStore.defaultCalendarForNewEvents
            do {
                try eventStore.save(event, span: .thisEvent)
                let alert = UIAlertController(title: "保存完了", message: "カレンダーに保存されました。", preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
                self.present(alert, animated: true, completion: nil)
            }
            catch {
                print("Save is failed.")
            }
        }
        else{
            let alert = UIAlertController(title: "カレンダーアクセス", message: "カレンダーに保存するためには、\n設定>\nプライバシー>\nカレンダー\nでアクセスを許可して下さい。", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alert, animated: true, completion: nil)
        }
    }
}
14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9