【问题标题】:How to get a UIView under a UIScrollView to detect touches?如何在 UIScrollView 下获取 UIView 以检测触摸?
【发布时间】:2011-03-20 01:25:04
【问题描述】:

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

【问题讨论】:

    标签: iphone uiscrollview touches


    【解决方案1】:

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

    • – 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。结果上面的触摸事件方法不会被调用。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-06
          • 1970-01-01
          • 2014-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-01
          • 1970-01-01
          相关资源
          最近更新 更多