UIWebView无法单击链接

时间:2011-06-08 18:01:01

标签: iphone ios uiwebview

我很确定我理解如何使用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中的链接并发生任何事情。它甚至看起来都不允许链接上的按下状态。链接突出显示为链接,不允许点击。

想法?

2 个答案:

答案 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;
}