我有一个UIViewController和一个与它关联的UIView。 UIView有许多子视图。iPhone:处理触摸透明
如何处理触摸事件在我的UIViewController子类指定的矩形内?
这个处理应该是透明的:的UIView和它的子视图仍然应该接受他们的触摸事件,即使它们相交指定的矩形。
P.S.
- 覆盖触动开始在视图 控制器不起作用。内部视图 不会传递事件。
- 添加自定义 按钮的UIView子视图 列表的末尾也不起作用。内部 子视图未收到触摸 事件。
我有一个UIViewController和一个与它关联的UIView。 UIView有许多子视图。iPhone:处理触摸透明
如何处理触摸事件在我的UIViewController子类指定的矩形内?
这个处理应该是透明的:的UIView和它的子视图仍然应该接受他们的触摸事件,即使它们相交指定的矩形。
P.S.
touchesBegan/touchesMoved/touchesEnded可能是要走的路。取决于你正在尝试做什么,UIGestureRecognizer也可能是一个选项。
为了确保子视图传递活动后,userInteractionEnabled为YES的子视图集。
UIView的默认设置为yes,但一些子类(特别的UILabel)覆盖这个并将其设置为NO。
仅仅因为视图默认情况下不会传递事件并不一定意味着它是必须的。
您可以继承您正在使用的视图,并让它们将事件传递到视图控制器上。
另一个想法是在所有的视图之上实际上有一个透明的处理程序。也就是说,有一个透明的UIView,它位于你的视图之上,处理触摸事件,但也传递它们。我不知道这是否在实践中有效,但听起来像是这样。
您的看法,及其控制器可以处理使用的touchesBegan,touchesEnded或touchesMoved触摸。作为一个例子,你可以选择将事件传递给响应者链中的下一个响应者 。通过这种方式,您的每个视图都有机会根据触摸事件进行操作。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//do something here and then pass the event on
[self.nextResponder touchesBegan:touches withEvent:event];
}
可以UILabel有子视图吗?或者这只是为了确保它不包括背后的东西? – jasongetsdown 2010-07-26 20:33:00
我从来没有做过,但我没有看到任何UILabel无法拥有子视图的原因。至于原因。 。 。谁知道?通常,人们并不认为标签是接收触摸事件的东西,但有时很方便。 – 2010-07-26 20:55:36