Как добавить заголовок события (из текстового представления пользовательского интерфейса) в событие календаря, созданное моим приложением?

Я разработал приложение, и мое приложение должно создать событие в календаре устройства. Я прошел через EventKitProgGuide и изучал SimpleEKDemo.

Упрощая код из SimpleEKDemo, я сгенерировал код, показанный ниже, который открывает "экран событий календаря" прямо из моего приложения и правильно генерирует событие. Я в порядке с этим.

Теперь мне нужно использовать текстовое содержимое UITextView в качестве заголовка события!

Может ли кто-нибудь помочь мне с этим кодом?

Спасибо,

Marcos

Вот мой код:

@.h
#import <EventKitUI/EventKitUI.h>
#import <EventKit/EventKit.h>

@property (nonatomic, strong) EKEventStore *eventStore;
@property (nonatomic, strong) EKEvent *event;
@property (nonatomic, strong) EKCalendar *defaultCalendar;
@property (nonatomic, strong) 
IBOutlet UITextView *textView1;
- (IBAction)agendar:(UIButton *)sender;

@.m

- (void)viewDidLoad
{
[super viewDidLoad];
self.eventStore = [[EKEventStore alloc]init];
self.textView1.text = @"hello world!";
}


-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self checkEventStoreAccessForCalendar];
}


- (IBAction)agendar:(UIButton *)sender {
EKEventEditViewController *addController = [[EKEventEditViewController alloc] init];
addController.eventStore = self.eventStore;
addController.editViewDelegate = self;
[self presentViewController:addController animated:YES completion:nil];
self.event = [EKEvent eventWithEventStore:self.eventStore];

// Jeff's suggested code:
self.event.title = self.textView1.text;

// Jeff's SaveEvent Sugestion
NSError *err;
[self.eventStore saveEvent:self.event span:EKSpanThisEvent error:&err];


}


-(void)checkEventStoreAccessForCalendar
{
EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];

switch (status)
{
    case EKAuthorizationStatusAuthorized: [self accessGrantedForCalendar];
        break;

    case EKAuthorizationStatusNotDetermined: [self requestCalendarAccess];
        break;


    case EKAuthorizationStatusDenied:
    case EKAuthorizationStatusRestricted:
    {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alerta de Privacidade" message:@"Permissão de acesso ao calendário não concedida."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
     [alert show];
    }
        break;
    default:
        break;
}
}


-(void)requestCalendarAccess
{
    [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
     {
         if (granted)
         {
             Tela8ViewController * weakSelf = self;

             dispatch_async(dispatch_get_main_queue(), ^{

             [weakSelf accessGrantedForCalendar];
             });
         }
     }];
}


-(void)accessGrantedForCalendar
{
    self.defaultCalendar = self.eventStore.defaultCalendarForNewEvents;
}

- (void)eventEditViewController:(EKEventEditViewController *)controller
      didCompleteWithAction:(EKEventEditViewAction)action
{

    [self dismissViewControllerAnimated:YES completion:^
     {
         if (action != EKEventEditViewActionCanceled)
         {
              dispatch_async(dispatch_get_main_queue(), ^{

             });
         }
     }];
}

2 ответа

Решение

Есть два способа создать событие с EventKit. Ваш пример кода в настоящее время имеет сочетание обоих, поэтому вы должны выбрать только один!

A: Создайте событие с предварительно установленными определенными полями (в вашем случае заголовком) и дайте пользователю возможность просмотреть и сохранить его (или выбрать, чтобы отменить и отменить его) с помощью EKEventEditViewController. В этом случае вашему коду не нужно фиксировать событие - просто посмотрите ответ делегата, чтобы подтвердить, что это произошло.

- (void)createEventWithTitle:(NSString *)title
{
    EKEvent *newEvent = [EKEvent eventWithEventStore:self.eventStore];
    newEvent.title = title;

    EKEventEditViewController *controller = [[EKEventEditViewController alloc] init];
    controller.eventStore = self.eventStore;
    controller.event = newEvent;
    controller.editViewDelegate = self;

    [self presentViewController:controller animated:YES completion:nil];
}

// EKEventEditViewController delegate method

- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action
{
    if (action == EKEventEditViewActionSaved) {
        // event has been committed
    }
    // alternatives are EKEventEditViewActionCanceled, EKEventEditViewActionDeleted
    [self dismissViewControllerAnimated:YES completion:Nil];
}

Б. Вы можете создать событие и зафиксировать его полностью в своем коде, если вам не нужно участие пользователя. В этом случае вы можете использовать EKEventStore saveEvent: span: error: вместо того, чтобы полагаться на EKEventEditViewController.

Вы пробовали что-то вроде

self.event.title = self.textView1.text;

?

Другие вопросы по тегам