我的UIWebView
内有一个UIViewController
的应用。我从Web服务加载HTML作为这样的字符串:
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 :(得分:23)
您是否已将UIWebView
的代理人设置为UIViewController
?就我所见,你的代码没有任何明显的错误,所以它很可能就像那样小。
答案 1 :(得分:21)
在课堂上添加..
@interface yourViewController : UIViewController
<UIWebViewDelegate>
在View did load
中添加- (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;
然后它将以你应得的方式完美地工作.. !! :)
答案 2 :(得分:1)
将 UIWebView 的委托设置为 UIViewController ,之后使用此UIWebview方法并检查条件,例如现在webview当前网址是google.com,如果假设你点击了gmail,则url包含带有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;
}
答案 3 :(得分:0)
如果您已经正确设置了UIWebViewDelegate,只需执行
即可self.webView loadHTMLString:_string baseURL:nil
self.webView.delegate = self;
应该有效
答案 4 :(得分:0)
添加此行( 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;
答案 5 :(得分:0)
Apple在iOS 9上引入了Safari View Controller.Safari View Controller将用户期望的所有功能带到您的应用程序,而无需离开它。
首先我们需要导入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)
答案 6 :(得分:-3)
是的,在你的超链接标签中添加
target="blank"
一个问号就可以了,谢谢