Возможно ли перенаправить пользователя в приложение «Календарь» нового события с программным обеспечением с заполненными датами начала и окончания? Я знаю Introduction to Calendars and Reminders, но это кажется излишним. Я также пробовал calshow://
, но, похоже, не работал, или я не мог найти правильную схему.iOS: открыть приложение «Календарь» Новое окно события с заполненной датой
ответ
@import EventKit;
@import EventKitUI;
затем представить eventkit с помощью этого:
- (IBAction)ScheduleClicked:(id)sender {
EKEventStore *eventStore = [[EKEventStore alloc]init];
if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted,NSError* error){
if(!granted){
NSString *message = @"Hey! This Project Can't access your Calendar... check your privacy settings to let it in!";
dispatch_async(dispatch_get_main_queue(), ^{
// Present alert for warning.
});
}else{
EKEventEditViewController *addController = [[EKEventEditViewController alloc] initWithNibName:nil bundle:nil];
addController.event = [self createEvent:eventStore];
addController.eventStore = eventStore;
[self presentViewController:addController animated:YES completion:nil];
addController.editViewDelegate = self;
}
}];
}
}
Между тем некоторые делегаты для придания детали конечной даты дата начала календаря.
#pragma mark - eventEditDelegates -
- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action{
if (action ==EKEventEditViewActionCanceled) {
[self dismissViewControllerAnimated:YES completion:nil];
}
if (action==EKEventEditViewActionSaved) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}
#pragma mark - createEvent -
-(EKEvent*)createEvent:(EKEventStore*)eventStore{
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"New Event";
event.startDate = @"Your start date";
event.endDate = @"Your end date";
[email protected]"Location";
event.allDay = YES;
event.notes [email protected]"Event description";
NSString* calendarName = @"Calendar";
EKCalendar* calendar;
EKSource* localSource;
for (EKSource *source in eventStore.sources){
if (source.sourceType == EKSourceTypeCalDAV &&
[source.title isEqualToString:@"iCloud"]){
localSource = source;
break;
}
}
if (localSource == nil){
for (EKSource *source in eventStore.sources){
if (source.sourceType == EKSourceTypeLocal){
localSource = source;
break;
}
}
}
calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:eventStore];
calendar.source = localSource;
calendar.title = calendarName;
NSError* error;
[eventStore saveCalendar:calendar commit:YES error:&error];
return event;
}
Это CreateEvent создаст новый календарь
Позвольте мне знать, если у вас есть какие-либо другие вопросы.
Я заявлял, что я не забочусь о создании события программно, просто о перенаправлении на экран «Календарь событий нового события» с предварительно заполненными значениями –
вы можете перенаправить EKEventEditViewController, который является экраном вашего события –
, и то же самое, что я сделал, проверьте выше код. вы можете ввести экран событий с предварительно заполненными значениями в этом делетете - (EKEvent *) createEvent: (EKEventStore *) eventStore { –
Да, это может произойти, вы можете перенаправить его. –
@NarendraPandey не могли бы вы продумать, как? –