swift calendar
とかで検索すると独自UIを作る情報は検索されるけど、あんまりEventKitを使った情報が出てこなかった。
リファレンス上のデモもswiftのバージョンがないし。
Google Calendarの時も思ったけど、あんま情報ないんだよね。ライブラリー(?)の更新とかもあんまないし。カレンダーって人気ないのかな?w
バージョン
環境 | バージョン |
---|---|
Xcode | 7.3, 7.2 |
Swift | 2.2, 2.1 |
iOS | 9.3, 9.2 |
参照したドキュメント
使い方
準備
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)
}
}