Схема URL для открытия родного календаря с определенной датой

Я нашел пример кода для открытия календаря из моего приложения, но не могу открыть на определенную дату.

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

Есть ли способ добавить конкретную дату в конце строки "lunchUrl", чтобы при открытии пользователем календаря отображалась указанная дата.

Я уже пробовал следующие форматы: @"calshow://?=2013 12 19", @"calshow://?=2013-12-19", @"calshow://?=2013+12+19", Кажется, ни один из них не работает для меня... есть идеи, что я делаю не так?

4 ответа

Я немного поиграл с этой схемой URL и нашел способ сделать это. Основные два момента:

  1. Не используйте "//" после calshow:
  2. Отметка времени прохождения с контрольной даты (1 января 2001 года)

Вот код:

- (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];
}

И вот как я это называю:

// 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]];
}

Возможно, вам следует принять во внимание, что calshow: не является общедоступной схемой URL, поэтому, возможно, Apple не одобрит ее использование таким образом. Или, возможно, они не будут (я не исследовал это).

Для реагирования родных с моментами:

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

Это работает на ios 8 - просто добавьте секунды с 00:00 1 января 2001 г., чтобы открыть cal 2 января 2001 г.

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

Я использую RubyMotion, поэтому мой код выглядит примерно так:

url = NSURL.URLWithString("calshow:#{my_date - Time.new(2001,1,1)}")
UIApplication.sharedApplication.openURL(url)

Свифт 3

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

Комментарии о том, позволяет ли Apple использовать это, будут оценены!

Другие вопросы по тегам