我想打开从我的应用原生iOS日历(iCal中),并添加事件。 有什么办法,我可以打开特定事件日历?
我也跟着打开iPhone日历应用程序 ,但尚未成功。
我想打开从我的应用原生iOS日历(iCal中),并添加事件。 有什么办法,我可以打开特定事件日历?
我也跟着打开iPhone日历应用程序 ,但尚未成功。
查看日历和提醒编程指南 。 但基本过程是:
添加EventKit.Framework
和EventKitUI.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's 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's 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; }
使用URL方案打开本机压光机的应用程序。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"calshow://"]];
http://devsupport.layar.com/entries/23687993-How-to-use-Custom-URI-Scheme-Button-in-the-Creator-
下面的代码有助于添加事件,本地日历。
- (NSString*)addEventToCalendarWithTitle:(NSString *)eventTitlestr Description:(NSString *)eventDescriptionstr startDate:(NSString *)startDatestr startTime:(NSString *)startTimestr {
NSString *returneventidentifier=nil;
if (__IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED) {
NSDateFormatter *formatter_=[[NSDateFormatter alloc]init];
NSTimeZone *gmtZone = [NSTimeZone systemTimeZone];
NSDate *startedDate=nil;
NSDate *endedDate=nil;
[formatter_ setTimeZone:gmtZone];
NSLocale *enLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"];
formatter_.locale = enLocale;
[enLocale release];
if (startDatestr!=nil&&startTimestr!=nil) {
startDatestr = [startDatestr stringByAppendingString:startTimestr];
}
[formatter_ setDateFormat:[DATE_FORMAT_FROM_RESPONSE stringByAppendingString:TIME_FORMAT_FROM_RESPONSE]]; // here date and time formats are appended as datestring and time string are appended
if(startDatestr!=nil){
startedDate = [formatter_ dateFromString:startDatestr];
EKEventStore *eventStore = [[EKEventStore alloc] init];
// __block BOOL accessGranted = NO;
// if([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
// dispatch_semaphore_t sema = dispatch_semaphore_create(0);
// [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
// accessGranted = granted;
// dispatch_semaphore_signal(sema);
// }];
// dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
// } else { // we're on iOS 5 or older
// accessGranted = YES;
// }
//
// if (accessGranted) {
// }
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = eventTitlestr;
event.notes = eventDescriptionstr;
event.startDate = startedDate;
endedDate = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];
event.endDate =endedDate ;
event.alarms=[NSArray arrayWithObject:[EKAlarm alarmWithRelativeOffset:DEFAULTALERTTIME]];
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
[eventStore release];
eventStore=nil;
[endedDate release];
endedDate=nil;
returneventidentifier=event.eventIdentifier;
}
[formatter_ release];
formatter_=nil;
}
else {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert !" message:@"Lower IOS versions event adding functionality is not possible." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[alert release];
}
return returneventidentifier;
}