2013-01-25 16 views
5

Nếu tôi hiển thị một liên kết đến một bản đồ trong một trang webmở iOS6 của Apple Maps ứng dụng từ một liên kết trong một UIWebView

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

nó mở ứng dụng iOS6 của Apple Maps bản địa khi nhấp vào trong trình duyệt của iPhone Safari chuẩn. Khi tôi hiển thị cùng một trang web trong một UIWebView bên trong ứng dụng của tôi và sau đó nhấp vào liên kết, phương pháp đại biểu của tôi

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

được gọi, và các thông số là

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

Nếu phương pháp đại biểu trả YES để chỉ rằng UIWebView nên tiếp tục và mở liên kết, cuộc gọi mới tới đại biểu được kích hoạt ngay lập tức và lần này các thông số là

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

và quay lại YES cho điều này, dự đoán, kết quả trong việc mở trang web maps.google.com trong UIWebView của tôi. Nhưng tôi thực sự đã muốn ứng dụng Apple Maps iOS6 khởi chạy. Tôi có thể thử một số CLGeocoder để tạo một MKMapItem từ URL, dọc theo các dòng How to launch iOS Maps App with specific address in iOS 6?, nhưng CLGeocoder dường như muốn văn bản thuần túy và không phải là url với tất cả chú thích thông thường của nó, một công việc phân tích chi tiết. Và nếu tôi phân tích cú pháp URL khác với cách Safari di động thực hiện, thì tôi có thể thấy các kết quả bản đồ khác nhau tùy thuộc vào việc tôi đã truy cập ứng dụng Maps thông qua UIWebView hoặc Safari từ cùng một liên kết ban đầu.

Có cách nào để có UIWebView để mở ứng dụng Apple Maps iOS6 từ liên kết mà không phải phân tích cú pháp và sau đó mã hóa địa lý URL không?

Là một sang một bên, sau khi phương pháp đại biểu của tôi được gọi với url maps.google.com, nó được gọi là hai lần với các thông số:

url=about:blank 
navigationType=UIWebViewNavigationTypeOther 

và mà cuối cùng không có tác dụng trên màn hình. Bất kỳ ý tưởng đó là những gì về?

Trả lời

4

Có, có cách để mở liên kết maps.apple.com vào ứng dụng Maps từ UIWebview. Không có UIWebview mở liên kết trực tiếp, nhưng chuyển nó sang hệ điều hành để sắp xếp. Trong webView: shouldStartLoadWithRequest: navigationType:, tôi tìm kiếm các liên kết bản đồ và đối xử với nó đặc biệt:

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

Và đó mở ứng dụng của Apple Maps trong iOS6. Trong iOS5, nó sẽ mở trang web bản đồ google trong Safari. Tôi sẽ tìm kiếm các hệ thống iOS5 và xử lý URL khác nhau ở đó.