Aks*_*ade 10 icalendar ios uidocumentinteraction
我想从我的应用程序中打开本机IOS日历(ical)并添加事件.有什么方法可以打开特定活动的日历吗?
我还以编程方式关注Open iphone日历应用程序,但尚未成功.
Rob*_*Rob 31
请参阅" 日历和提醒编程指南".但基本过程是:
将EventKit.Framework和添加EventKitUI.Framework到项目中.(请参阅链接到库或框架.)
导入标题:
#import <EventKitUI/EventKitUI.h>
Run Code Online (Sandbox Code Playgroud)如果要创建活动,请使用:
- (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];
}
Run Code Online (Sandbox Code Playgroud)您的视图控制器应符合EKEventEditViewDelegate协议:
@interface ViewController () <EKEventEditViewDelegate>
Run Code Online (Sandbox Code Playgroud)
并实现该didCompleteWithAction方法:
- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action
{
[self dismissViewControllerAnimated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)显然,您可以按照自己的方式创建活动.例如,这是在下周查找具有相应标题的事件,如果找不到,则创建一个新事件(在四小时内开始的一小时事件):
- (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;
}
Run Code Online (Sandbox Code Playgroud)nan*_*nda 10
使用网址方案打开本机日历应用.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"calshow://"]];
Run Code Online (Sandbox Code Playgroud)
http://devsupport.layar.com/entries/23687993-How-to-use-Custom-URI-Scheme-Button-in-the-Creator-
| 归档时间: |
|
| 查看次数: |
15036 次 |
| 最近记录: |