【问题标题】:Passing Touch Events传递触摸事件
【发布时间】:2011-03-01 03:19:01
【问题描述】:

我的视图控制器视图中有一个正常工作的 UIButton。

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

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

我是否必须在视图控制器中做任何事情来接收触摸事件并将它们发送到 nextResponder?

我已经阅读了 Responder Chain 上的所有文件,但我仍然有点困惑。

【问题讨论】:

  • 所以,我刚刚确认我的视图控制器正在接收我发送给 nextResponder 的转发触摸消息。但是视图控制器视图中的按钮没有。我需要做什么才能将事件传递给视图控制器视图中的按钮?

标签: view controller uitouch


【解决方案1】:

视图的 nextResponder 要么是它的视图控制器,要么是它的父视图。您设置中的 UIButton 两者都不是,因此它不会接收事件。

在这种情况下,您应该覆盖pointInside:withEvent: 以返回NO,而不是将事件转发给nextResponder。这样,系统就会表现得好像您的视图不存在一样。根据文档,您还可以在视图上将 userInteractionEnabled 设置为 NO 以获得相同的效果。

【讨论】:

  • 我无法将 userInteractionEnabled 设置为 NO,因为我的部分视图必须响应触摸。我必须通过我的 topView 透明的触摸,但出于设计原因,视图必须是全屏的,它覆盖了较低的 UI 元素,例如我的按钮。在我的 UIButton 或 topView 中覆盖 pointInside:withEvent?
  • 酷!在 topView 中覆盖 pointInside:withEvent: 完全有效!太感谢了!猜猜这是我努力的例子!
  • 附注试图投票给你的答案,但显然我太菜鸟了!
  • 很高兴它成功了。您应该能够通过单击答案左侧的复选框轮廓来“接受”答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多