Three20 TTWebController игнорирует поддерживаемые схемы URL, зарегистрированные приложением в TTURLMap - PullRequest
0 голосов
/ 31 января 2011

Мы используем TTWebController для отображения веб-страниц, обслуживаемых нашим сервером. Я хотел бы, чтобы эти страницы включали URL, которые будут обрабатываться приложением iphone. Например:

page.html:

<a href="myapp://profile">Show Profile On Phone"</a>

AppDelegate.m

TTUrlMap* map= navigator.URLMap;
[map from:@"*" toViewcontroller:[TTWebController class]];
[map from:@"myapp://profile" toViewcontroller:[ProfileController class]];

Когда страница отображается на телефоне в TTWebController, нажатие на ссылку не отображает ProfileController, ничего не происходит. Я ожидаю, что TTWebController распознает, что схема зарегистрирована, запустит обычную магию TTNavigator и покажет соответствующий контроллер. Есть ли способ сделать это?

Примечание: регистрация схемы URL в самом приложении тоже не работает, т.е. TTWebController не распознает URL и вызывает:

[[UIApplication sharedApplication] openURL:url]

Есть идеи?

1 Ответ

1 голос
/ 02 февраля 2011

Похоже, что TTWebController регистрируется как UIWebViewDelegate из UIWebView, поэтому вы можете переопределить -[UIWebViewDelegate webView:shouldStartLoadWithRequest:navigationType:] - например, если все ваши URL начинаются с myapp:, то вы можете сделать это:

- (BOOL)webView:(UIWebView *)webView 
  shouldStartLoadWithRequest:(NSURLRequest *)request 
  navigationType:(UIWebViewNavigationType)navigationType
{
  if (navigationType == UIWebViewNavigationTypeLinkClicked &&
      [request.URL.scheme isEqualToString:@"myapp"])
  {
    // This is our private URL
    TTOpenURL([request.URL absoluteString]);
    return NO;
  }
  else
  {
    return [super webView:webView 
                  shouldStartLoadWithRequest:request
                  navigationType:navigationType];
  }
}
...