从UIWebView中的链接打开iOS6 Apple Maps应用程序

如果我在网页上显示地图的链接

<a href="http://maps.apple.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398">Location</a> 

在标准iPhone Safari浏览器中单击时,它会打开本机iOS6 Apple Maps应用程序。 当我在我的应用程序内的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应用程序。 我可以尝试使用MKMapItem从URL中创build一个MKMapItem , 如何在iOS 6中使用特定地址启动iOS Maps App? ,但CLGeocoder似乎想要纯文本,而不是所有的常规注释的url,相当详细的parsing工作。 如果我以不同的方式parsingurl,那么我可能会看到不同的地图结果,具体取决于我是否通过我的UIWebView或Safari从相同的初始链接到达地图应用程序。

有没有办法让一个UIWebView从链接打开iOS6 Apple Maps应用程序,而不必parsing,然后地址parsing的URL?

另外,在使用maps.google.com url调用我的委托方法之后,使用这些参数调用两次:

 url=about:blank navigationType=UIWebViewNavigationTypeOther 

并且最终对显示器没有影响。 任何想法是什么?

是的,有一种方法可以从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中打开Apple Maps应用程序。 在iOS5中,它将在Safari中打开Goog​​le地图网页。 我会寻找iOS5系统,并在那里对URL进行不同的处理。