URL scheme for opening native calendar with specific date

前端 未结 4 2039
天命终不由人
天命终不由人 2020-12-09 17:51

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 share         


        
相关标签:
4条回答
  • 2020-12-09 18:10

    This works on ios 8 - just add seconds since 00:00 1 Jan 2001, so to open cal on 2 Jan 2001

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

    I'm using RubyMotion, so my code looks something like this:

    url = NSURL.URLWithString("calshow:#{my_date - Time.new(2001,1,1)}")
    UIApplication.sharedApplication.openURL(url)
    
    0 讨论(0)
  • 2020-12-09 18:14

    For react native with momentjs:

    const testDate = moment('2020–04–01'),      // date is local time
      referenceDate = moment.utc('2001–01-01'), // reference date is utc
      seconds = testDate.unix() — referenceDate.unix();
    Linking.openURL('calshow:' + seconds); //opens cal to April 1 2020
    

    https://medium.com/@duhseekoh/need-to-open-the-os-calendar-at-a-specific-date-in-react-native-55f3a085cf8e

    0 讨论(0)
  • 2020-12-09 18:22

    Swift 3

    UIApplication.shared.openURL(URL(string: "calshow:\(date.timeIntervalSinceReferenceDate)")!)
    

    Comments on whether Apple allows to use this would be appreciated!

    0 讨论(0)
  • 2020-12-09 18:26

    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).

    0 讨论(0)
提交回复
热议问题