Схема 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 и нашел способ сделать это. Основные два момента:
- Не используйте "//" после
calshow:
- Отметка времени прохождения с контрольной даты (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
Это работает на 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 использовать это, будут оценены!