我有一个具有UITableView
as a的视图subview
,它完全覆盖了父视图。当我尝试touchesBegan
为父视图实现时,我注意到根本没有调用该方法。有没有办法覆盖这种行为?
问问题
5410 次
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 回答