2011-04-04 67 views
2

我有看法有以下几种观点层次控制器:的UIWebView中的UIScrollView和触摸通知

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

的UIScrollView有分页启用,每个页面都包含一个UIWebView的。 UIScrollView也占用整个屏幕,UIWebView。

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

我试着对这些视图中的每一个进行子类化,并尝试了touchesBegan和轻击手势识别器,但没有任何结果。我所能得到的是在UIWebView上非常不可靠的手势识别器,它在20次点击中工作一次,非常随机且非常奇怪。

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

回答

2

我想你需要找到一种构建UI的替代方法。苹果明确recommend against embedding scroll views inside scroll views

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

不知道你想达到什么目标,很难建议一个有效的选择。标签?屏幕底部的轻扫手势? webviews内的链接?

+0

我不认为有如何建立我的用户界面的其他方式。我需要UIWebView呈现格式化文本,我需要滚动视图才能在这些Web视图页面之间进行切换。我想要检测屏幕左侧和右侧的触摸,以便能够进入下一个/上一页(补充标准滚动视图的滑动功能) – Lope 2011-04-04 09:33:27

+0

看起来你对混合滚动视图是正确的。当我禁用webview上的用户交互时,一切正常。在另一方面,我失去了复制功能,这将是很好的(我不使用链接或任何其他交互的东西) – Lope 2011-04-04 09:41:49

+0

在屏幕的左侧和右侧的长,薄按钮? – 2011-04-04 09:44:00

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]; 
}