Поиск…
Запрос разрешения
Ваше приложение не может получить доступ к своим напоминаниям и вашему календарю без разрешения. Вместо этого он должен показывать предупреждение пользователю, запрашивая у него / нее возможность доступа к событиям для приложения.
Чтобы начать работу, импортируйте фреймворк EventKit
:
стриж
import EventKit
Objective-C
#import <EventKit/EventKit.h>
Создание EKEventStore
Затем мы EKEventStore
объект EKEventStore
. Это объект, из которого мы можем получить доступ к данным календаря и напоминаний:
стриж
let eventStore = EKEventStore()
Objective-C
EKEventStore *eventStore = [[EKEventStore alloc] init];
Заметка
Создание объекта
EKEventStore
каждый раз, когда нам нужно получить доступ к календарю, неэффективно. Попробуйте сделать это один раз и использовать его везде в своем коде.
Проверка доступности
Доступность имеет три разных статуса: Авторизованный, Отклоненный и Не определено. Не определено. Приложение должно предоставлять доступ.
Чтобы проверить доступность, мы используем метод authorizationStatusForEntityType()
объекта EKEventStore
:
стриж
switch EKEventStore.authorizationStatusForEntityType(EKEntityTypeEvent){
case .Authorized: //...
case .Denied: //...
case .NotDetermined: //...
default: break
}
Objective-C
switch ([EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]){
case EKAuthorizationStatus.Authorized:
//...
break;
case EKAuthorizationStatus.Denied:
//...
break;
case EKAuthorizationStatus.NotDetermined:
//...
break;
default:
break;
}
Запрос разрешения
Поместите следующий код в случай NotDetermined
:
стриж
eventStore.requestAccessToEntityType(EKEntityTypeEvent, completion: { [weak self] (userGrantedAccess, _) -> Void in
if userGrantedAccess{
//access calendar
}
}
Доступ к различным типам календарей
Доступ к массиву календарей
Чтобы получить доступ к массиву EKCalendar
s, мы используем метод calendarsForEntityType
:
стриж
let calendarsArray = eventStore.calendarsForEntityType(EKEntityType.Event) as! [EKCalendar]
Итерирование через календари
Просто используйте простой for
цикла:
стриж
for calendar in calendarsArray{
//...
}
Доступ к заголовку и цвету календаря
стриж
let calendarColor = UIColor(CGColor: calendar.CGColor)
let calendarTitle = calendar.title
Objective-C
UIColor *calendarColor = [UIColor initWithCGColor: calendar.CGColor];
NSString *calendarTitle = calendar.title;
Добавление события
Создание объекта события
стриж
var event = EKEvent(eventStore: eventStore)
Objective-C
EKEvent *event = [EKEvent initWithEventStore:eventStore];
Настройка соответствующего календаря, названия и дат
стриж
event.calendar = calendar
event.title = "Event Title"
event.startDate = startDate //assuming startDate is a valid NSDate object
event.endDate = endDate //assuming endDate is a valid NSDate object
Добавление события в календарь
стриж
try {
do eventStore.saveEvent(event, span: EKSpan.ThisEvent)
} catch let error as NSError {
//error
}
Objective-C
NSError *error;
BOOL *result = [eventStore saveEvent:event span:EKSpanThisEvent error:&error];
if (result == NO){
//error
}