时间:2010-07-26 18:20:58

标签: iphone cocoa-touch uiview uiviewcontroller uiresponder

我有一个UIViewController并与它关联UIView。 UIView有许多子视图。

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

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

P.S。

  1. 在视图中覆盖touchesBegan 控制器不起作用。内心的看法 没有通过事件。
  2. 添加自定义 按钮到UIView子视图的结尾 列表也不起作用。内 子视图没有接触到 事件。

3 个答案:

答案 0 :(得分:0)

touchesBegan / touchesMoved / touchesEnded可能是要走的路。根据您的具体操作,UIGestureRecognizer也可能是一个选项。

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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]; 
}