2014-02-18 2 views
5

Я кодирую приложение iPhone с помощью UIWebView в Xamarin, используя C#.Xamarin iOS C# Открытые ссылки в Safari от UIWebView

По умолчанию встроенные ссылки в веб-окне открывают веб-страницу в том же веб-представлении. Вместо этого я хотел бы, чтобы они запускали связанную страницу в новом экземпляре браузера сафари.

Это был дан ответ на объективном C в X-Code, но, насколько я могу видеть, не Xamarin C#

webView.LoadHtmlString(html, new NSUrl(Const.ContentDirectory, true)); 

Заранее спасибо

Адам

ответ

3

Если содержание загрузки в UIWebView, и вы хотите использовать Safari открывать ссылки, делать это так, как описано выше, поможет вам пустую страницу. Вам нужно проверить тип NavigationType.

private bool HandleShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navType) 
{ 
    if (navType == UIWebViewNavigationType.LinkClicked) 
    { 
    UIApplication.SharedApplication.OpenUrl(request.Url); 
    return false; 
    } 
    return true; 
} 
2

Самый простой/простой способ для этого необходимо назначить делегата UIWebView: ShouldStartLoad:

webView.ShouldStartLoad = (w, urlRequest, navigationType) => { 

    // Open the url in Safari here. 
    // The urlRequest parameter is of type NSUrlRequest, you can get the URL from it. 
    return false; //return true for urls you actually want your web view to load. 

}; 

Убедитесь, что делегат возвращает false, для ссылок, которые вы хотите загрузить в Safari, так что ваш UIWebView не загружает ссылку.

+1

Спасибо за быстрый ответ, однако, когда я реализую этот делегат веб-представление появляется пустой, тогда как раньше я был в состоянии загрузить HTML текстовую строку в: Я реализации следующим образом: –

+0

'код \t \t \t WebView .ShouldStartLoad = (ш, URLRequest, navigationType) => { \t \t \t \t UIApplication.SharedApplication.OpenUrl (URLRequest.url); \t \t \t \t return false; \t \t \t}; ' –

+0

Я отредактировал свой ответ, пожалуйста, посмотрите сейчас. Верните true для ссылок, которые вы хотите загрузить в веб-представление, и false для ссылок, которых вы не используете. –

7

С помощью этой команды вы можете открыть веб-страницу в браузере устройства (Safari).

UIApplication.SharedApplication.OpenUrl(new NSUrl("www.google.com")); 

Вы не должны использовать UIWebView. Если вы хотите открыть некоторые веб-страницы в UIWebView, а некоторые с Safari, вам необходимо реализовать делегата ShouldStartLoad. Здесь вы можете определить, следует ли открывать веб-страницу в UIWebView или, скорее, в Safari.

private bool HandleShouldStartLoad(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) 
{ 
    // you need to implement this method depending on your criteria 
    if (this.OpenInExternalBrowser(request)) 
    { 
     // open in Safari 
     UIApplication.SharedApplication.OpenUrl(request.Url); 
     // return false so the UIWebView won't load the web page 
     return false; 
    } 

    // this.OpenInExternalBrowser(request) returned false -> let the UIWebView load the request 
    return true; 
} 

В прошлом где-то в ViewDidLoad (или другое место, где вы initiliaze WebView) добавьте следующий код.

webView.ShouldStartLoad = HandleShouldStartLoad; 
Смежные вопросы