Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
54
Help us understand the problem. What is going on with this article?
@katzhide

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

More than 5 years have passed since last update.

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)
    }
}
54
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
katzhide
金融ITの会社でPMやっています。仕事ではコードを全然書かないので、趣味でたまに書いています。 以前、RecDesktopというMacアプリやCommitterというWebサービスを作りました。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
54
Help us understand the problem. What is going on with this article?