Поиск…


Запрос разрешения

Ваше приложение не может получить доступ к своим напоминаниям и вашему календарю без разрешения. Вместо этого он должен показывать предупреждение пользователю, запрашивая у него / нее возможность доступа к событиям для приложения.

Чтобы начать работу, импортируйте фреймворк 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
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow