【问题标题】:UIWebView cannot click linkUIWebView 无法点击链接
【发布时间】:2011-06-08 18:01:01
【问题描述】:

我很确定我了解如何使用 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 加载时,我都会在日志中看到“Loaded”,所以我知道委托方法被调用了。但是我永远无法单击 UIWebView 中的链接并发生任何事情。它甚至看起来都不允许链接处于按下状态。该链接像链接一样突出显示,只是不允许点击。

想法?

【问题讨论】:

  • urlString 的值是多少?

标签: iphone ios uiwebview


【解决方案1】:

UIWebView 没有响应触摸事件的原因很可能是这一行:

webView.opaque = NO;

尝试将不透明设置为YES

我的理解是,对于响应触摸事件的视图,该视图必须在事件传递机制执行的视图层次结构遍历期间通过调用 hitTest:withEvent: 来返回。

来自hitTest:withEvent:documentation

此方法忽略隐藏、禁用用户交互或 alpha 级别小于 0.01 的视图对象。

更新

基于新信息:如果 UIWebView 嵌入在 UIScrollView 中,请引用 Apple docs

重要提示:您不应在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为这两个对象的触摸事件可能会混淆和错误处理。

【讨论】:

  • 遗憾的是这似乎没有帮助。
  • 好的。 bodyHTML的内容是什么?您的 HTML 是否正确?您是否尝试过在浏览器中打开它并查看您的链接是否在那里有效?
  • bodyHTML 的内容是我从我的网站中提取的完全有效的 HTML。看起来这是一个子视图问题,其中一个覆盖另一个。我将 UIWebview 放置在作为 UIScrollView 的子视图放置的 UIView 中。显然这是问题所在,我将不得不弄清楚如何改变这一点。
【解决方案2】:

请尝试以下代码

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

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 2013-07-31
    • 2014-02-25
    • 1970-01-01
    • 2021-07-02
    • 2015-10-13
    • 2011-06-08
    • 1970-01-01
    相关资源
    最近更新 更多