Ответ 1
См. Руководство по программированию календаря и напоминаний. Но основной процесс:
-
Добавьте
EventKit.Framework
иEventKitUI.Framework
в свой проект. (См. Связь с библиотекой или Framework.) -
Импортировать заголовок:
#import <EventKitUI/EventKitUI.h>
-
При создании события вы используете:
- (IBAction)didPressCreateEventButton:(id)sender { EKEventStore *store = [[EKEventStore alloc] init]; if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { // iOS 6 [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [self createEventAndPresentViewController:store]; }); } }]; } else { // iOS 5 [self createEventAndPresentViewController:store]; } } - (void)createEventAndPresentViewController:(EKEventStore *)store { EKEvent *event = [self findOrCreateEvent:store]; EKEventEditViewController *controller = [[EKEventEditViewController alloc] init]; controller.event = event; controller.eventStore = store; controller.editViewDelegate = self; [self presentViewController:controller animated:YES completion:nil]; }
-
Контроллер вашего представления должен соответствовать протоколу
EKEventEditViewDelegate
:@interface ViewController () <EKEventEditViewDelegate>
и реализуем метод
didCompleteWithAction
:- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action { [self dismissViewControllerAnimated:YES completion:nil]; }
-
Вы можете создать свое мероприятие так, как хотите. Например, это поиск события на следующей неделе с соответствующим заголовком, и если он его не найдет, создайте новое событие (часовое событие, которое начинается через четыре часа):
- (EKEvent *)findOrCreateEvent:(EKEventStore *)store { NSString *title = @"My event title"; // try to find an event EKEvent *event = [self findEventWithTitle:title inEventStore:store]; // if found, use it if (event) return event; // if not, let create new event event = [EKEvent eventWithEventStore:store]; event.title = title; event.notes = @"My event notes"; event.location = @"My event location"; event.calendar = [store defaultCalendarForNewEvents]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [[NSDateComponents alloc] init]; components.hour = 4; event.startDate = [calendar dateByAddingComponents:components toDate:[NSDate date] options:0]; components.hour = 1; event.endDate = [calendar dateByAddingComponents:components toDate:event.startDate options:0]; return event; } - (EKEvent *)findEventWithTitle:(NSString *)title inEventStore:(EKEventStore *)store { // Get the appropriate calendar NSCalendar *calendar = [NSCalendar currentCalendar]; // Create the start range date components NSDateComponents *oneDayAgoComponents = [[NSDateComponents alloc] init]; oneDayAgoComponents.day = -1; NSDate *oneDayAgo = [calendar dateByAddingComponents:oneDayAgoComponents toDate:[NSDate date] options:0]; // Create the end range date components NSDateComponents *oneWeekFromNowComponents = [[NSDateComponents alloc] init]; oneWeekFromNowComponents.day = 7; NSDate *oneWeekFromNow = [calendar dateByAddingComponents:oneWeekFromNowComponents toDate:[NSDate date] options:0]; // Create the predicate from the event store instance method NSPredicate *predicate = [store predicateForEventsWithStartDate:oneDayAgo endDate:oneWeekFromNow calendars:nil]; // Fetch all events that match the predicate NSArray *events = [store eventsMatchingPredicate:predicate]; for (EKEvent *event in events) { if ([title isEqualToString:event.title]) { return event; } } return nil; }