如果我在网页中显示指向地图的链接
<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
从网址How to launch iOS Maps App with specific address in iOS 6?开始创建MKMapItem
,但是CLGeocoder
似乎想要纯文本而不是传统的网址注释,非常详细的解析工作。如果我以不同于Mobile safari的方式解析URL,那么我可能会看到不同的地图结果,具体取决于我是否通过我的UIWebView或Safari从相同的初始链接到达地图应用程序。
有没有办法让UIWebView从链接打开iOS6 Apple Maps应用程序而无需解析然后对URL进行地理编码?
顺便说一句,在使用maps.google.com网址调用我的委托方法后,使用这些参数调用它两次:
url=about:blank
navigationType=UIWebViewNavigationTypeOther
并且最终对显示器没有影响。知道这是什么意思吗?
答案 0 :(得分:4)
是的,有一种方法可以从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进行不同的处理。