Swift

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

More than 3 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)
}
}