2010-07-26 83 views
0

我有一个UIViewController和一个与它关联的UIView。 UIView有许多子视图。iPhone:处理触摸透明

如何处理触摸事件在我的UIViewController子类指定的矩形内?

这个处理应该是透明的:的UIView和它的子视图仍然应该接受他们的触摸事件,即使它们相交指定的矩形。

P.S.

  1. 覆盖触动开始在视图 控制器不起作用。内部视图 不会传递事件。
  2. 添加自定义 按钮的UIView子视图 列表的末尾也不起作用。内部 子视图未收到触摸 事件。

回答

0

touchesBegan/touchesMoved/touchesEnded可能是要走的路。取决于你正在尝试做什么,UIGestureRecognizer也可能是一个选项。

为了确保子视图传递活动后,userInteractionEnabled为YES的子视图集。

UIView的默认设置为yes,但一些子类(特别的UILabel)覆盖这个并将其设置为NO。

+0

可以UILabel有子视图吗?或者这只是为了确保它不包括背后的东西? – jasongetsdown 2010-07-26 20:33:00

+0

我从来没有做过,但我没有看到任何UILabel无法拥有子视图的原因。至于原因。 。 。谁知道?通常,人们并不认为标签是接收触摸事件的东西,但有时很方便。 – 2010-07-26 20:55:36

0

仅仅因为视图默认情况下不会传递事件并不一定意味着它是必须的。

您可以继承您正在使用的视图,并让它们将事件传递到视图控制器上。

另一个想法是在所有的视图之上实际上有一个透明的处理程序。也就是说,有一个透明的UIView,它位于你的视图之上,处理触摸事件,但也传递它们。我不知道这是否在实践中有效,但听起来像是这样。

0

您的看法,及其控制器可以处理使用的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]; 
}