アプリケーションからネイティブの IOS カレンダー (ical) を開き、イベントを追加したいと考えています。特定のイベントのカレンダーを開く方法はありますか?
Open iphone calendar appもプログラムでフォローしていますが、まだ成功していません。
アプリケーションからネイティブの IOS カレンダー (ical) を開き、イベントを追加したいと考えています。特定のイベントのカレンダーを開く方法はありますか?
Open iphone calendar appもプログラムでフォローしていますが、まだ成功していません。
カレンダーとリマインダーのプログラミング ガイドを参照してください。しかし、基本的なプロセスは次のとおりです。
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];
}
View Controller はEKEventEditViewDelegate
プロトコルに準拠する必要があります。
@interface ViewController () <EKEventEditViewDelegate>
didCompleteWithAction
メソッドを実装します。
- (void)eventEditViewController:(EKEventEditViewController *)controller didCompleteWithAction:(EKEventEditViewAction)action
{
[self dismissViewControllerAnimated:YES completion:nil];
}
もちろん、イベントは好きなように作成できます。たとえば、これは次の週に適切なタイトルのイベントを検索し、見つからない場合は新しいイベント (4 時間で始まる 1 時間のイベント) を作成します。
- (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-