2013-01-25 25 views
5

如果我在一个网页开放iOS6的苹果地图应用在一个UIWebView

<a href="http://maps.apple.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398">Location</a> 
它在标准的iPhone Safari浏览器点击后打开本地iOS6的苹果地图应用

显示一个链接到地图。当我在我的应用程序里面一个UIWebView显示相同的网页,然后单击

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

被称为链接,我的委托方法和参数

url=http://maps.apple.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398 
navigationType=UIWebViewNavigationTypeLinkClicked 

如果委托方法返回YES指示UIWebView应该继续并打开链接,立即触发代表的新呼叫,此时参数为

url=http://maps.google.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398 
navigationType=UIWebViewNavigationTypeLinkClicked 

并返回YES这个可预见的结果是在我的UIWebView中打开了maps.google.com网页。但我确实希望启动iOS6 Apple Maps应用程序。我可以尝试使用CLGeocoder来创建一个MKMapItem沿着How to launch iOS Maps App with specific address in iOS 6?的行,但CLGeocoder似乎要纯文本,而不是一个URL与所有其传统的注释,相当详细的解析工作。如果我以与移动Safari浏览器不同的方式解析网址,则可能会看到不同的地图结果,具体取决于我是否通过我的UIWebView或Safari从相同的初始链接到达地图应用程序。

是否有某种方法可以让UIWebView从链接中打开iOS6 Apple Maps应用程序,而无需解析然后对URL进行地址解析?

顺便说一句,我的委托方法被调用与maps.google.com网址后,它与这些参数叫了两声:

url=about:blank 
navigationType=UIWebViewNavigationTypeOther 

,并最终具有显示没有影响。任何想法是什么?

回答

4

是的,有一种方法可以通过UIWebview将maps.apple.com链接打开到地图应用程序中。没有UIWebview直接打开链接,但将其传递给操作系统进行排序。在webView: shouldStartLoadWithRequest: navigationType:,我找地图链接,并特别对待它:

if (([url.scheme isEqualToString:@"http"] || [url.scheme isEqualToString:@"https"]) && [url.host isEqualToString:@"maps.apple.com"]) { //it's an apple maps app request 
    NSLog(@"Attempting Apple Maps app open"); 
    [[UIApplication sharedApplication]openURL:url]; 
    return NO; 
} 

并在打开的iOS6的苹果地图应用。在iOS5中,它将在Safari中打开Goog​​le地图网页。我会寻找iOS5系统,并在那里对URL进行不同的处理。