2013-01-25 5 views
5

Wenn ich in einer Webseiteöffnen iOS6 Apple-Maps-App von einem Link in einem UIWebView

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

es öffnet die native iOS6 Apple-Maps-App einen Link zu einer Karte angezeigt werden, wenn sie im Standard-iPhone Safari Browser geklickt. Wenn ich die gleiche Webseite anzeigen YES in einer UIWebView in meinem App und klicken Sie dann auf den Link, mein Delegatmethode

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

genannt wird, und die Parameter sind

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

Wenn der Delegat-Methode gibt, um anzuzeigen, dass die UIWebView voran gehen und den Link zu öffnen, ein neuer Anruf an den Delegaten wird sofort ausgelöst, und diesmal sind die Parameter

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

und Rückkehr YES Dies führt erwartungsgemäß dazu, dass die maps.google.com-Webseite in meinem UIWebView geöffnet wird. Aber ich wollte eigentlich, dass die iOS6 Apple Maps App startet. Ich könnte versuchen, CLGeocoder eine MKMapItem von der URL, in der Linie von How to launch iOS Maps App with specific address in iOS 6?, aber CLGeocoder zu erstellen, scheint Klartext und nicht eine URL mit all seinen konventionellen Annotation, eine ziemlich detaillierte Parsing-Job. Und wenn ich die URL anders analysiere als bei Mobile Safari, sehe ich möglicherweise unterschiedliche Kartenergebnisse, je nachdem, ob ich die Google Maps App über meine UIWebView oder Safari über den gleichen Link erreicht habe.

Gibt es eine Möglichkeit, ein UIWebView zu erhalten, um die iOS6 App von Apple Maps über einen Link zu öffnen, ohne die URL analysieren und dann geocodieren zu müssen?

url=about:blank 
navigationType=UIWebViewNavigationTypeOther 

und dass schließlich hat auf dem Display keine Wirkung:

Als beiseite, nach meiner Delegatmethode mit der maps.google.com URL aufgerufen wird, wird es zweimal mit diesen Parametern aufgerufen. Irgendeine Idee, worum es geht?

Antwort

4

Ja, es gibt eine Möglichkeit, einen maps.apple.com-Link aus einem UIWebview in die Google Maps App zu öffnen. Lassen Sie UIWebview den Link nicht direkt öffnen, sondern übergeben Sie ihn an das Betriebssystem. In webView: shouldStartLoadWithRequest: navigationType:, sehe ich für die Karten Link und behandeln sie speziell:

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; 
} 

Und das öffnet die Apple-Maps-App in iOS6. In iOS5 wird die Google Maps-Webseite in Safari geöffnet. Ich werde nach iOS5-Systemen suchen und die URL dort auch anders behandeln.

Verwandte Themen