2010-12-15 84 views
27

我有一個應用程序UIWebViewUIViewController。我從Web服務加載HTML像這樣的字符串:在Safari中打開鏈接而不是UIWebVIew?

self.webView loadHTMLString:_string baseURL:nil 

是否有可能在該字符串的HTML鏈接將在瀏覽器中的一個UIWebView在我的應用程序打開,而不是?我怎樣才能做到這一點?

我在UIViewController中嘗試這一點, 「主機」 的一個UIWebView:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
    [[UIApplication sharedApplication] openURL:[request URL]]; 
    return NO; 
    } 
    return YES; 
} 

它似乎並不奏效....

任何想法?

+0

你張貼應該工作的代碼,假設[請求URL]是Safari(或iOS設備上的其他應用程序)可以處理的一種URL。你能發佈一個用戶可以點擊的網址的例子嗎? – Greg 2010-12-15 17:14:03

回答

22

有你的UIWebView的委託設置爲您UIViewController?就我所見,代碼沒有任何明顯的錯誤,所以它可能會是這樣的小事。

+0

是的,我做到了。 但我沒有添加這個如下:不確定它是錯的或正確的,但ut似乎工作:webView.delegate = self;添加此錯誤是否有誤? – treasure 2010-12-15 18:32:10

+1

將''添加到類定義中意味着您實現了該協議。這並不意味着它是代表,只是它可以。你確實需要'webView.delegate = self'(或者你可以在Interface Builder中做到這一點)。 – 2010-12-15 20:53:39

+0

@Yar答案已經說過了。該評論澄清了「UIWebViewDelegate」協議和「委託」屬性之間的區別。 – 2012-01-03 07:43:03

-3

是的,在你的超級鏈接標籤添加

target="blank" 

和一個問號將被罰款,謝謝

+4

設置'target =「blank」'或'target =「_ blank」'似乎沒有效果。在iOS 4.3中,鏈接仍然在UIWebView內部打開。 – Palimondo 2011-09-09 22:39:32

21

類添加這個..

@interface yourViewController : UIViewController 
<UIWebViewDelegate> 

在視圖添加這並負載

- (void)viewDidLoad 
{ 
    [description loadHTMLString:string baseURL:nil]; 
     description.delegate = self; 
} 

在.m文件添加此

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
    if (inType == UIWebViewNavigationTypeLinkClicked) { 
     [[UIApplication sharedApplication] openURL:[inRequest URL]]; 
     return NO; 
    } 

    return YES; 
} 

注:

UIWebView *description; 
@synthesize description; 

然後,它會完美的工作方式,你應得的..! :)

+0

請務必在webView中使用V大寫,如下所示: - (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType – dinjas 2012-12-07 23:12:12

+0

我使用UIWebView在Web上顯示引號,每個報價的結束。這有助於我在Safari中打開鏈接,而不是在UIWebView中打開鏈接。 – JScarry 2014-02-13 22:52:45

1

現在設置的UIWebView代表的UIViewController在使用這種方法的UIWebView後檢查的條件,例如web視圖當前網址是google.com,如果假設您點擊Gmail中url包含帶有gmail的字符串。使用下面的方法打開Safari瀏覽器並自動加載該網址。

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
    if (inType == UIWebViewNavigationTypeLinkClicked) { 
     NSURL *url = [inRequest URL]; 
     if ([[url absoluteString] rangeOfString:@"gmail"].location == NSNotFound) { 
      [[UIApplication sharedApplication] openURL:[inRequest URL]]; 
      return NO; 
     } 
    } 
    return YES; 
} 
0

如果你已經正確安裝了UIWebViewDelegate,簡單地做

self.webView loadHTMLString:_string baseURL:nil 
self.webView.delegate = self; 

應該工作

0

加入這一行( self.webview.delegate =自我; )

對於viewController.m中的示例

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; 
[self.webview loadHTMLString:htmlString baseURL:nil]; 
self.webview.delegate = self; 
0

Apple在iOS 9上引入了Safari視圖控制器.Safari View Controller將用戶期望從Safari中獲得的所有功能都帶到了您的應用程序中,而不必離開它。

首先,我們需要導入Safari瀏覽器服務

#import <SafariServices/SafariServices.h> 

客觀C: -

NSString *yourUrl = @"http://yourURL"; 
SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]]; 
[self presentViewController:svc animated:YES completion:nil]; 

對於斯威夫特: -

let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!) 
self.presentViewController(svc, animated: true, completion: nil) 
相關問題