繁体   English   中英

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

[英]How to get a UIView under a UIScrollView to detect touches?

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

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

  • - 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。 结果,不会调用上述触摸事件方法。

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

如果滚动视图后面的按钮大小可以填充滚动视图的整个contentSize区域而不会搞砸你的界面,最简单的解决方案就是将它放在滚动视图中(在所有其他视图下)并执行此操作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM