LoginSignup
58
57

More than 5 years have passed since last update.

SwiftでiOS標準カレンダーを使う方法

Last updated at Posted at 2016-03-27

swift calendarとかで検索すると独自UIを作る情報は検索されるけど、あんまりEventKitを使った情報が出てこなかった。
リファレンス上のデモもswiftのバージョンがないし。

Google Calendarの時も思ったけど、あんま情報ないんだよね。ライブラリー(?)の更新とかもあんまないし。カレンダーって人気ないのかな?w

バージョン

環境 バージョン
Xcode 7.3, 7.2
Swift 2.2, 2.1
iOS 9.3, 9.2

参照したドキュメント

EventKitのリファレンス

プログライミングガイド

使い方

準備

EventStore経由であれこれするので、初期化

calendar.swift
// EventStoreを初期化
let eventStore = EKEventStore()

カレンダーへのアクセス許可の取得

calendar.swift
// 許可状況を確認して、許可されていなかったら許可を得る
func allowAuthorization() {
    if getAuthorization_status() {
        // 許可されている
        return
    } else {
        // 許可されていない
        eventStore.requestAccessToEntityType(.Event, completion: {
        (granted, error) in
            if granted {
                return
            }
            else {
                print("Not allowed")
            }
        })

    }
}

// 認証ステータスを確認する
func getAuthorization_status() -> Bool {
    // 認証ステータスを取得
    let status = EKEventStore.authorizationStatusForEntityType(.Event)

    // ステータスを表示 許可されている場合のみtrueを返す
    switch status {
    case .NotDetermined:
        print("NotDetermined")
        return false

    case .Denied:
        print("Denied")
        return false

    case .Authorized:
        print("Authorized")
        return true

    case .Restricted:
        print("Restricted")
        return false
    }
}

カレンダーの一覧の取得

calendar.swift
let calendars = eventStore.calendarsForEntityType(.Event)

イベントの一覧を取得

calendar.swift
func listEvents() {
    // 検索条件を準備
    let startDate = NSDate()
    let endDate = NSDate()
    let defaultCalendar = eventStore.defaultCalendarForNewEvents    // ここではデフォルトのカレンダーを指定
    // 検索するためのクエリー的なものを用意
    let predicate = eventStore.predicateForEventsWithStartDate(startDate, endDate: endDate, calendars: [defaultCalendar])
    // イベントを検索
    let events = eventStore.eventsMatchingPredicate(predicate)
}

イベントの新規登録

calendar.swift
func addEvent() {
    // イベントの情報を準備
    let startDate = NSDate()
    let cal = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
    let endDate = cal.dateByAddingUnit(.Hour, value: 2, toDate: startDate, options: NSCalendarOptions())!
    let title = "カレンダーテストイベント"
    let defaultCalendar = eventStore.defaultCalendarForNewEvents
    // イベントを作成して情報をセット
    let event = EKEvent(eventStore: eventStore)
    event.title = title
    event.startDate = startDate
    event.endDate = endDate
    event.calendar = defaultCalendar
    // イベントの登録
    do {
        try eventStore.saveEvent(event, span: .ThisEvent)
    } catch let error {
        print(error)
    }

}

イベントの削除

calendar.swift
func deleteEvent(event: EKEvent) {
    do {
        try eventStore.removeEvent(event, span: .ThisEvent)
    } catch let error {
        print(error)
    }
}
58
57
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
58
57