0

我有一个 UIViewController 和一个与之关联的 UIView。UIView 有许多子视图。

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

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

附言

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

3 回答 3

0

touchesBegan/touchesMoved/touchesEnded 可能是要走的路。根据您要执行的操作,UIGestureRecognizer 也可能是一种选择。

要确保子视图传递事件,请在子视图上将 userInteractionEnabled 设置为 YES。

UIView 默认将此设置为 YES,但某些子类(尤其是 UILabel)会覆盖此设置并将其设置为 NO。

于 2010-07-26T20:11:15.190 回答
0

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

您可以对正在使用的视图进行子类化,并让它们将事件传递到视图控制器。

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

于 2010-07-26T20:19:27.140 回答
0

您的视图及其控制器可以使用 touchesBegan、touchesEnded 或 touchesMoved 处理触摸。以 touchesBegan 为例,您可以选择将事件传递给响应者链中的下一个响应者。这样,您的每个视图都将有机会根据触摸事件执行某些操作。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //do something here and then pass the event on
    [self.nextResponder touchesBegan:touches withEvent:event]; 
}
于 2010-07-26T20:30:27.630 回答