UIScrollView中的UIWebView和触摸通知

时间:2011-04-04 08:43:48

标签: ios uiwebview uiscrollview

我的视图控制器具有以下视图层次结构:

UIView
 '- UIScrollView
      '- UIWebView
      '- UIWebView
      '- ... more UIWebViews

UIScrollView启用了分页,每个页面都包含一个UIWebView。 UIScrollView也占据整个屏幕,UIWebView也是如此。

现在我的问题是我需要检测整个屏幕上的触摸。我猜UIScrollView以某种方式占用了大部分(因为UIWebView也包含滚动视图,事情变得更加复杂)。

我尝试了对每个视图进行子类化,然后尝试了touchesBegan和tap手势识别器,但没有尝试。我所能获得的只是UIWebView上非常不可靠的手势识别器,它在20次点击中工作过一次,非常随机且非常奇怪。

我该如何解决这个问题?我需要touchesBegan和touchesEnded或点击手势。

2 个答案:

答案 0 :(得分:2)

我认为你需要找到一种构建UI的替代方法。 Apple明确地recommend against embedding scroll views inside scroll views

  

你不应该嵌入UIWebView或   UIScrollView中的UITableView对象   对象。如果这样做,出乎意料   因为触摸会导致行为   两个对象的事件都可以   混淆和错误处理。

如果不知道自己要实现的目标,就很难能够提出有效的替代方案。标签?屏幕底部的滑动手势? webviews中的链接?

答案 1 :(得分:0)

您可以这样做,但是您需要小心触摸事件,以便scrollview不会处理用于webview的触摸。

下面代码的导入行是[[[wv1 subviews] lastObject] setScrollEnabled:NO];

for (NSString *link in links) {
    UIWebView *wv1 = [[UIWebView alloc] initWithFrame:frame];
    NSURL *aurl = [site getUrl:link local:YES];
    [wv1 loadRequest:[NSURLRequest requestWithURL:aurl]];
    [[[wv1 subviews] lastObject] setScrollEnabled:NO];
    [scrollView addSubview:wv1];
    [wv1 release];  
}