繁体   English   中英

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

[英]Open iOS6 Apple Maps app from a link in a UIWebView

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

<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应用程序。 我可以尝试一个CLGeocoder从URL创建一个MKMapItem ,沿着如何在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

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

是的,有一种方法可以从UIWebview打开maps.apple.com链接到Maps应用程序。 没有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中打开谷歌地图网页。 我会寻找iOS5系统,并在那里对URL进行不同的处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM