2013-12-19 1 views
9

Я нашел образец кода для открытия календаря из своего приложения, но я не могу открыть его в определенную дату.Схема URL для открытия собственного календаря с определенной датой

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

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

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

ответ

25

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

  1. Не используйте "//" после calshow:
  2. Pass метки времени после даты (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 предпочла бы использовать его таким образом. Или, может быть, они не будут (я не исследовал это).

+0

Привет Андрис, я использовал выше кода, его прекрасно работает на дату в прошлом. если я дам будущую дату, она вернется к текущей дате. Не могли бы вы дать какое-то предложение о том, чтобы открыть дату в будущем. – Surfer

+0

Это возможно, чтобы получить дату из предыдущего календаря по умолчанию? – Alok

1

Это работает на КСН 8 - просто добавьте секунд, прошедших с 00:00 1 января 2001 года, так, чтобы открыть кал на 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) 
0

Swift 3

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

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