2

是否可以处理 UIButton 发生的触摸,然后将其传递给下一个响应者?

4

1 回答 1

2

编辑

一个有效的方法也是覆盖的touchesEnded:withEvent:方法UIResponder

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    // handle touch
    [super touchesEnded:touches withEvent:event];
} 

文档中:

此方法的默认实现什么也不做。然而,直接的 UIKit 子类UIResponder,特别是UIView,将消息转发到响应者链。要将消息转发给下一个响应者,请将消息发送到super(超类实现);不要将消息直接发送给下一个响应者。


原始答案

为了确定UIView视图层次结构中的哪个应该接收触摸,使用该方法-[UIView hitTest:withEvent:]。根据文档

该方法通过调用pointInside:withEvent:每个子视图的方法来遍历视图层次结构,以确定哪个子视图应该接收触摸事件。如果pointInside:withEvent:返回YES,则类似地遍历子视图的层次结构,直到找到包含指定点的最前面的视图。如果视图不包含该点,则忽略其视图层次结构的分支。

所以一种方法可能是创建一个UIButton子类并覆盖该方法-pointInside:withEvent:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(self.bounds, point) {
        // The touch is within the button's bounds
    }
    return NO;
}

这将为您提供在按钮范围内处理触摸的机会,但同时返回NO将使命中测试失败,从而在视图层次结构中传递触摸。

于 2013-10-30T16:31:23.420 回答