3

我有一个具有UITableViewas a的视图subview,它完全覆盖了父视图。当我尝试touchesBegan为父视图实现时,我注意到根本没有调用该方法。有没有办法覆盖这种行为?

4

4 回答 4

13

实际上有一种方法可以覆盖这种行为。您需要扩展阻塞父视图和覆盖touchesBegan方法的每个子对象,如下所示:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   [super touchesBegan:touches withEvent:event];
   [self.nextResponder touchesBegan:touches withEvent:event];
}

例如,如果您在 UIView 内部的 UIScrollView 中有一个 UIButton,那么您需要创建两个自定义类。一个扩展 UIButton 和另一个扩展 UIScrollView。在这些自定义类中的每一个中,您都需要添加上述方法定义。在这些更改之后,您将能够touchesBegan在父 UIView 中接收事件。

于 2013-02-13T06:46:18.767 回答
3

touchesBegan方法与父视图的框架有关。如果框架对父视图不可见并且完全被 包围subviews,则父视图将不会收到触摸。

于 2012-10-10T04:21:17.237 回答
1

您还可以设置:

[theViewThatIsCoveringParent setUserInteractionEnabled:NO];

这样所有的触摸都会被父级捕获。

于 2012-10-12T14:54:14.233 回答
0

这样做:为什么我的 UIViewController 不在其视图的响应者链中?

简而言之:

  • 将您的视图链接到您的控制器。
  • 在正在接触的视图中添加一个名为nextResponderPlusSomething(已经有一个)的属性nextResponder
  • viewdidload将此属性设置为控制器(自我)
  • 在里面touchesBegan添加一个调用nextResponderPlusSomething:touchesBegan
  • 在控制器上实现此事件,将事件发送到您要调用的视图。
于 2012-10-12T13:52:38.623 回答