Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

URL scheme for opening native calendar with specific date

I have found the sample code to open calendar from my app, but i can't open at a specific date.

NSString* launchUrl = @"calshow://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];

Is there a way to add specific date at the end of the "lunchUrl" string so when the user opens the calendar it displays the given date.

I have already tried the following formats: @"calshow://?=2013 12 19", @"calshow://?=2013-12-19", @"calshow://?=2013+12+19". None of these seem to work for me... any ideas what am i'm doing wrong?

like image 674
Andras Hunor Avatar asked Dec 19 '13 14:12

Andras Hunor


1 Answers

I played with this url scheme a little and found the way to do it. The main two points are:

  1. Don't use "//" after the calshow:
  2. Pass timestamp since reference date (1 Jan 2001)

Here is the code:

- (void)showCalendarOnDate:(NSDate *)date
{
    // calc time interval since 1 January 2001, GMT
    NSInteger interval = [date timeIntervalSinceReferenceDate]; 
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"calshow:%ld", interval]];
    [[UIApplication sharedApplication] openURL:url];
}

And this is how I call it:

// create some date and show the calendar with it
- (IBAction)showCalendar:(id)sender
{
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setDay:4];
    [comps setMonth:7];
    [comps setYear:2010];

    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    [self showCalendarOnDate:[cal dateFromComponents:comps]];
}

Perhaps you should take into account that calshow: is not a public url scheme, so maybe Apple would frown upon using it in this way. Or maybe they wouldn't (I haven't researched that).

like image 130
Andris Zalitis Avatar answered Sep 28 '22 03:09

Andris Zalitis