我很确定我理解如何使用webView:shouldStartLoadWithRequest:navigationType:方法点击UIWebView,但我的webView甚至不允许我点击链接。我正在使用:
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(12, top, boundsSize.width - 40.0, 400.0f)];
webView.delegate = self;
webView.backgroundColor = [UIColor clearColor];
webView.opaque = NO;
webView.allowsInlineMediaPlayback = YES;
webView.dataDetectorTypes = UIDataDetectorTypeAll;
// add to subview
我正在加载HTML字符串而不是加载URL:
[webView loadHTMLString:bodyHTML baseURL:nil];
委托方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"Loaded");
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
NSURL *url = request.URL;
NSString *urlString = url.absoluteString;
NSLog(urlString);
}
return YES;
}//end
每次我的webview加载我都会在我的日志中获得“已加载”,所以我知道委托方法正在被调用。但我永远不能点击我的UIWebView中的链接并发生任何事情。它甚至看起来都不允许链接上的按下状态。链接突出显示为链接,不允许点击。
想法?
答案 0 :(得分:2)
UIWebView无法响应触摸事件的原因很可能是这一行:
webView.opaque = NO;
尝试将不透明设置为YES
。
我的理解是,对于响应触摸事件的视图,在事件传递机制执行的视图层次结构遍历期间,必须通过调用hitTest:withEvent:
来返回该视图。
来自hitTest:withEvent:
documentation:
此方法忽略隐藏的视图对象,禁用用户交互或alpha级别小于0.01的视图对象。
基于新信息:如果UIWebView嵌入在UIScrollView中,请引用Apple docs:
重要提示:您不应在UIScrollView对象中嵌入UIWebView或UITableView对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆和错误处理。
答案 1 :(得分:0)
请尝试使用以下代码
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if(navigationType==UIWebViewNavigationTypeLinkClicked)
{
[[UIApplication sharedApplication]openURL:request.URL];
return NO;
}
return YES;
}