如何在UIScrollView下获取UIView来检测触摸?

时间:2011-03-20 01:25:04

标签: iphone uiscrollview touches

我有一个UIScrollView ontop我的UIViewController在你现场的页面上重新创建像Gowalla iPhone应用程序中的效果。在我的滚动视图下,我有一个按钮,我希望能够执行它的动作,即使滚动视图的框架覆盖它(按钮的顶部,滚动视图清晰)。我该怎么办?可能吗? (必须是,Gowalla [不知何故]做到了)

3 个答案:

答案 0 :(得分:2)

至于我,我会通过覆盖以下方法将触摸事件转移到另一个视图。

  • - touchesBegan:withEvent:
  • - touchesMoved:withEvent:
  • - touchesEnded:withEvent:
  • - touchesCancelled:withEvent:

就像这样,

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     // pass touch event by default implement.
     [super touchesBegan:touches withEvent:event]; 

     // redirect the touch events. 
     [anotherView touchesBegain:touches withEvent:event];    
}

hitTest:withEvent:用于决定哪个视图应该响应视图层次结构树上的触摸事件。如果视图不想响应触摸事件,它将在hitTest中返回nil。因此,不会调用上述触摸事件方法。

答案 1 :(得分:0)

我不知道这个“Gowalla”应用程序可能做什么;希望您对“滚动视图后面的按钮,您可以通过滚动视图”进行触摸的描述是准确的。

如果滚动视图后面的按钮大小可以填充滚动视图的整个contentSize区域而不会搞砸您的界面,最简单的解决方案就是将其放在滚动视图中(在所有其他观点)并做到这一点。

否则,您最好的选择可能是创建一个具有清晰背景的自定义视图,以放置在滚动视图中,如上所示。简单的解决方案是让自定义视图(可能是UIControl)只需触摸按钮即可。如果由于某种原因无法做到这一点,那么您最好的选择是覆盖自定义视图上的hitTest:withEvent:以返回基础按钮。我要警惕滚动视图本身覆盖hitTest:withEvent:,因为这可能会影响滚动。

答案 2 :(得分:0)

尝试在滚动视图顶部添加按钮。唯一的问题是,如果你点击按钮,你将无法与scrollView交互,但它仍然可见。