2013-01-25 9 views
5

Se visualizzo un link ad una mappa in una pagina webAperte iOS6 mappe di Apple App da un collegamento in un UIWebView

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

apre la nativa Mappe iOS6 Apple App quando si fa clic nel browser standard iPhone Safari. Quando ho visualizzare la stessa pagina web in un UIWebView dentro la mia app e quindi fare clic sul collegamento, il mio metodo delegato

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

si chiama, ed i parametri sono

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

Se il metodo delegato ritorna YES per indicare che l'UIWebView dovrebbe andare avanti e aprire il link, una nuova chiamata al delegato è immediatamente attivato, e questa volta i parametri sono

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

e ritorno YES a questo, prevedibilmente, i risultati nella pagina web maps.google.com si aprono in UIWebView. Ma in realtà volevo che l'app iOS6 di Apple Maps venisse avviata. Potrei provare un CLGeocoder per creare un MKMapItem dall'URL, lungo le linee di How to launch iOS Maps App with specific address in iOS 6?, ma il CLGeocoder sembra voler il testo normale e non un url con tutte le sue annotazioni convenzionali, un lavoro di analisi abbastanza dettagliato. E se analizzo l'URL in modo diverso dal modo in cui Safari Safari lo fa, potrei vedere risultati di mappe diversi a seconda che io abbia raggiunto l'app Maps tramite il mio UIWebView o Safari dallo stesso link iniziale.

C'è un modo per ottenere un UIWebView per aprire l'app iOS6 di Apple Maps da un collegamento senza dover analizzare e quindi geocodificare l'URL?

Per inciso, dopo che il mio metodo delegato viene chiamato con l'url maps.google.com, si chiama due volte con questi parametri:

url=about:blank 
navigationType=UIWebViewNavigationTypeOther 

e che alla fine non ha alcun effetto sul display. Qualche idea di cosa si tratta?

risposta

4

Sì, c'è un modo per aprire un collegamento maps.apple.com nell'app Maps da una UIWebview. Non utilizzare UIWebview per aprire direttamente il collegamento, ma trasferirlo al sistema operativo per risolvere il problema. In webView: shouldStartLoadWithRequest: navigationType:, cerco il link mappe e trattarlo in maniera particolare:

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

e che apre l'applicazione Mappe Apple in iOS6. In iOS5, aprirà la pagina web di google maps in Safari. Cercherò i sistemi iOS5 e gestirò l'URL in modo diverso anche lì.

Problemi correlati