2015-10-13 2 views
0

Возможно ли в Objective-C в xCode открыть приглашение календаря iPhone «Добавить событие» с несколькими полями, которые уже заполнены? Например, имя, адрес и дата начала/окончания? Если да, то как? Это позволит пользователю по-прежнему изменять несколько параметров: когда он хочет быть предупрежденным и т. Д.iOS - позволяет пользователю добавлять событие календаря с некоторыми полями, заполненными

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

ответ

0

Вот как я справился с этим ... с помощью EKEventEditViewController!

Первое:

@import EventKitUI; 

В самом начале файла .m. Затем установите EKEventEditViewDelegate

Затем, когда вы хотите добавить событие, используйте следующий метод:

- (IBAction)addToCalendar:(id)sender { 
    EKEventStore *eventStore = [[EKEventStore alloc] init]; 
    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) 
    { 
     // the selector is available, so we must be on iOS 6 or newer 
     [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if (error) 
       { 
        NSLog(@"%@", error); 
        // display error message here 
       } 
       else if (!granted) 
       { 
        NSLog(@"%@ acce sdenied", error); 
        // display access denied error message here 
       } 
       else 
       { 
        EKEvent *event = [EKEvent eventWithEventStore: eventStore]; 
        event.title = nom; 
        event.location = adresse; 

        // Set the start and end dates to the event. 
        event.startDate = startDate; 
        event.endDate = endDate; // 
        EKEventEditViewController *eventViewController = [[EKEventEditViewController alloc] init]; 
        eventViewController.event = event; 
        eventViewController.eventStore=eventStore; 
        eventViewController.editViewDelegate = self; 
        [event setCalendar:[eventStore defaultCalendarForNewEvents]]; 
        [eventViewController setModalPresentationStyle:UIModalPresentationFullScreen]; 
        [self presentViewController:eventViewController animated:YES completion:NULL]; 
       } 
      }); 
     }]; 
    } 
} 

Наконец, добавьте этот метод делегата обрабатывать действие завершения:

-(void)eventEditViewController:(EKEventEditViewController *)controller 
     didCompleteWithAction:(EKEventEditViewAction)action { 
    NSError *error; 
    switch (action) { 
     case EKEventEditViewActionCancelled: 
      // User tapped "cancel" 
      NSLog(@"Canceled"); 
      break; 
     case EKEventEditViewActionSaved: 
      NSLog(@"Saved"); 
      [controller.eventStore saveEvent:controller.event span: EKSpanFutureEvents error:&error]; 
      [calendarBouton setTitle:@"Ajouté!" forState:UIControlStateDisabled]; 
      calendarBouton.enabled = NO; 
      break; 
     case EKEventEditViewActionDeleted: 
      // User tapped "delete" 
      NSLog(@"Deleted"); 
      break; 
     default: 
      NSLog(@"Default"); 
      break; 
    } 

    [self dismissViewControllerAnimated:YES completion:nil]; 

} 
1

Шаг 1 первого дубля Календарь Разрешение

dispatch_async(dispatch_get_main_queue(), ^{ 


    [self.eventManager.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 



     if(granted==NO) 
     { 

      BOOL permission=[[NSUserDefaults standardUserDefaults] boolForKey:@"CalendarPermissionAlert"]; 

      if(permission==NO) { 

       kAppDelegateObject.eventManager.eventsAccessGranted=NO; 

       [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"CalendarPermissionAlert"]; 

       UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Calendar Access is OFF" 
                    message:kCalenderResetMessage 
                    delegate:self 
                 cancelButtonTitle:@"CANCEL" 
                 otherButtonTitles:@"SETTING",nil]; 
       [alert show]; 
       alert.tag=101; 

       return ; 
      } 


     } 

Шаг 2

// Добавить событие

-(void)addEventWithMessage:(NSString*)eventMessage withEventDate:(NSDate *)eventDate 
EKEventStore *eventStore; 
eventStore = [[EKEventStore alloc] init]; 

// Создать новый объект события. EKEvent * event = [EKEvent eventWithEventStore: eventStore];

// Set the event title. 
event.title = eventMessage; 

// Set its calendar. 


NSString *identifier=[[NSUserDefaults standardUserDefaults]objectForKey:@"calenderId"]; //your application id 
// NSLog(@"cal identifier: %@",identifier); 
event.calendar = [eventStore calendarWithIdentifier:identifier]; 

//set Alarm 
NSTimeInterval secondsInOneHours = 1 * 60 * 60; 

NSDate *dateOneHoursAhead = [eventDate dateByAddingTimeInterval:secondsInOneHours]; 

// Set the start and end dates to the event. 
event.startDate = eventDate; 
event.endDate = dateOneHoursAhead; // 

NSError *error; 
    if ([eventStore saveEvent:event span:EKSpanFutureEvents commit:YES error:&error]) { 

    // NSLog(@"Event Added"); 
} 
else{ 
    // An error occurred, so log the error description. 
    // NSLog(@"%@", [error localizedDescription]); 
} 
+0

Спасибо для вашей помощи! Не могли бы вы правильно указать код? Трудно понять, что на самом деле находится в коде или нет! Спасибо alot –

+0

Откуда возникает EventManager? –

+0

EventManager - это класс NSObject, здесь я объявляю объект EKEventStore. EventManager.h @property (неатомный, сильный) EKEventStore * eventStore; EventManager.m - (instancetype) инициализации { себя = [супер] инициализации; if (self) { eventStore = [[EKEventStore alloc] init]; } return self; } –

Смежные вопросы