2011-03-01 95 views
4

我在我的视图控制器视图中有一个工作的UIButton。传递触摸事件

我有一个UIView实例在按钮(我将它称为topView)在同一个视图控制器的视图。如果满足条件,我将所有触摸事件(开始,移动,结束,取消)转发给视图的nextResponder。

但是当条件触发时,按钮没有收到事件。如果我移动topView,使其不在按钮上方,该按钮将工作(或将userInteractionEnabled属性设置为false)。如果topView位于按钮上方,则该按钮不起作用。太令人沮丧了,因为我可以看到视图下的按钮!

我是否必须在视图控制器中执行任何操作以接收将它们发送到下一个响应者的触摸事件?

我已经阅读了所有我可以在响应链上看到的文档,但我仍然有点困惑。

+0

所以,我刚刚确认我的视图控制器正在接收我发送给nextResponder的转发触摸消息。 但视图控制器视图中的按钮没有。我必须做什么才能将事件传递给视图控制器视图中的按钮? – 2011-03-01 04:04:21

回答

6

视图的nextResponder是其视图控制器或其超视图。您的设置中的UIButton既不是,所以它不会收到事件。

在这种情况下,您应该重写pointInside:withEvent:以返回NO,而不是将事件转发到下一个响应者。这样系统就会像你的观点那样行事,甚至不存在。根据文档,您也可以在视图上将userInteractionEnabled设置为NO,以获得相同的效果。

+0

我无法将userInteractionEnabled设置为NO,因为我的视图的某些部分必须响应触摸。我必须在我的topView透明的地方通过触摸,但出于设计原因,视图必须是全屏幕,其覆盖较低的UI元素,例如我的按钮。 Overide pointInside:withEvent在我的UIButton或topView中? – 2011-03-01 04:21:56

+0

酷!重写pointInside:withEvent:在topView完全工作!太感谢了!猜猜这是我试图努力的一个例子! – 2011-03-01 08:20:31

+0

p.s.试图投票你的答案,但显然我太菜鸟了! – 2011-03-01 08:21:26