在Safari中打开链接而不是UIWebVIew?

我有一个UIWebViewUIViewController内的应用程序。 我从Web服务中加载HTML,如下所示:

 self.webView loadHTMLString:_string baseURL:nil 

这个string中的HTML链接是否可以在浏览器中打开,而不是在我的应用程序的UIWebView? 我怎样才能做到这一点?

我已经在“主办”UIWebVIew的UIViewController中试过:

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

它似乎没有工作….

有任何想法吗?

你有没有设置UIWebView的委托给你的UIViewController ? 就我所见,代码没有任何明显的错误,所以它可能是这样的小事。

在课堂上添加

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

那么它将完美的工作方式,你应得的..! 🙂

设置UIWebView委托给你的UIViewController后,使用这个UIWebview方法,并检查条件,例如现在webview当前url是google.com,如果你点击gmail的url包含string与Gmail。 使用下面的方法,它打开一个Safari浏览器,并自动加载该url。

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

如果你已经正确地设置了UIWebViewDelegate,那么简单的做

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

应该pipe用

添加这一行(self.webview.delegate = self;)

例如在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; 

Apple在iOS 9上引入了Safari View Controller。Safari View Controller将用户所期望的所有function都带到您的应用程序中,而无需离开它。

首先,我们需要导入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]; 

对于Swift: –

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

是的,在你的超链接标签添加

 target="blank" 

还有一个问号会好的,谢谢