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

emr*_*s57 5 url maps uiwebview ios ios6

如果我在网页中显示指向地图的链接

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

它在标准iPhone Safari浏览器中单击时打开原生iOS6 Apple Maps应用程序.当我在我的应用程序内的UIWebView中显示相同的网页,然后单击链接,我的委托方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
Run Code Online (Sandbox Code Playgroud)

被调用,参数是

url=http://maps.apple.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398
navigationType=UIWebViewNavigationTypeLinkClicked
Run Code Online (Sandbox Code Playgroud)

如果委托方法返回YES以指示UIWebView应该继续并打开链接,则会立即触发对委托的新调用,这次参数是

url=http://maps.google.com/?q=Pricketts+Hill+Southampton+Hampshire+SO32+2JW&ll=50.913127,-1.191398 
navigationType=UIWebViewNavigationTypeLinkClicked
Run Code Online (Sandbox Code Playgroud)

YES可以预见,返回到此结果会导致我的UIWebView中的maps.google.com网页打开.但实际上我确实想要推出iOS6 Apple Maps应用程序.我可以尝试CLGeocoder创建一个MKMapItemURL,如何在iOS 6中启动具有特定地址的iOS Maps App?,但CLGeocoder似乎想要纯文本,而不是一个带有所有常规注释的url,相当详细的解析工作.如果我以不同于Mobile safari的方式解析URL,那么我可能会看到不同的地图结果,具体取决于我是否通过我的UIWebView或Safari从相同的初始链接到达地图应用程序.

有没有办法让UIWebView从链接打开iOS6 Apple Maps应用程序,而无需解析然后对URL进行地理编码?

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

url=about:blank 
navigationType=UIWebViewNavigationTypeOther
Run Code Online (Sandbox Code Playgroud)

并且最终对显示器没有影响.知道这是什么意思吗?

emr*_*s57 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;
}
Run Code Online (Sandbox Code Playgroud)

这会在 iOS6 中打开 Apple 地图应用程序。在iOS5中,它将在Safari中打开谷歌地图网页。我将寻找 iOS5 系统并在那里以不同的方式处理 URL。