2010-08-19 65 views
4

我有一个UIButton和一个UIView。视图位于按钮上方,并且大于按钮的大小。视图本身就是我想要接受的触摸事件,并且我想将它们转发给按钮,以便在触摸时发生所有正常的按钮视觉变化。如何从其他UIView将触摸转发到UIButton?

我似乎无法做到这一点 - 我的UIView实现了touchesBegan/Moved/Ended/Canceled,并且在相同的参数上调用相同的方法。但该按钮不响应。

我确保触摸方法实际上是在UIView上调用的。

有没有什么明显的我在这里失踪,或者获得控制信息的更好方法?还是有一个很好的理由,为什么这不应该工作?

谢谢!

[注:我没有寻找视图+按钮设计的解决方法。我们假设这是一个要求。我感兴趣的是其他控件的触控代理的控件概念。谢谢。]

回答

8

创建一个ContainerView,其中包含一个按钮并覆盖hitTest:withEvent:,以便它返回UIButton实例。

+0

辉煌,谢谢。 – 2010-08-19 22:56:40

+0

这个答案很了不起,它是解决UIKit许多问题的入口。通过重写hitTest,你可以得到任何对任何事件作出反应的东西。非常神奇。谢谢+1! – 2012-11-08 22:45:06

0

你确定你的方法被调用?如果你还没有设置userInteractionEnabled = YES,那么它将不起作用。

虽然之前我用​​过这种触摸转发没有问题,但我不知道为什么你会看到你遇到的问题。

+0

是的,这些方法正在按预期方式调用。除了touch *之外,你还转发了其他消息吗? UIButton的转发目标是什么?或者是其他东西?谢谢。 – 2010-08-19 19:41:58

+0

这不是一个UIButton;我认为这是“长期接触”的认可。但是我至少写了两遍,所以我可能会忘记一些东西。 – 2010-08-20 16:28:43