7

我的 UIViewController 顶部有一个 UIScrollView,当您在某个位置的页面上时,它可以重新创建类似于 Gowalla iPhone 应用程序中的效果。在我的滚动视图下,我有一个按钮,即使滚动视图的框架覆盖它(它在按钮顶部,滚动视图清晰),我也希望能够执行它的操作。我该怎么做这样的事情?可能吗?(它必须是,Gowalla [不知何故]做到了)

4

3 回答 3

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

于 2011-03-20T03:04:21.537 回答
0

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

于 2011-03-20T02:23:03.903 回答
0

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

如果您的滚动视图后面的按钮可以调整大小以填充contentSize滚动视图的整个区域而不会弄乱您的界面,那么最简单的解决方案就是将它放在滚动视图内(在所有其他视图下)并这样做。

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

于 2011-03-20T02:19:38.197 回答