Как добавить заголовок события (из текстового представления пользовательского интерфейса) в событие календаря, созданное моим приложением?
Я разработал приложение, и мое приложение должно создать событие в календаре устройства. Я прошел через 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;
?