[英]subview not receiving touches in iOS7
我有一个UIView响应点击(视图A)。 我有一个带有UITableView(视图B)的UITableViewController。 视图B被添加为视图A的子视图,并且视图B的面积小于视图A的面积。因此,如果用户在视图B内点击,他们可以在表中选择一行。 如果他们在桌子外点击但仍在视图A内,则视图A的响应会有所不同(这是一个隐藏自身的抽屉)。
在iOS 5和6中,此方法运行良好。但是,在iOS7中,即使视图B(UITableview)是视图A的子视图,它也似乎从未接收到触摸并且行也从未被选中。当我禁用视图A的UITapGestureRecognizer时,视图B然后开始获取触摸,用户可以选择表中的行(但是视图A现在不响应触摸,因此这是不可接受的)
我的代码没有更改。 关于iOS7中可能出什么问题的任何想法? 提前致谢!
您可以通过以下两种方式处理此问题:
您可以使用UIGestureRecognizerDelegate
gestureRecognizerShouldBegin
:
将您的视图控制器指定为符合UIGestureRecognizerDelegate
:
@interface ViewController () <UIGestureRecognizerDelegate> ... @end
指定您的视图控制器实际上是视图A的轻击手势识别器的delegate
:
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tap.delegate = self; [self.viewA addGestureRecognizer:tap];
如果gestureRecognizerShouldBegin
的位置包含在viewB
的frame
,则编写gestureRecognizerShouldBegin
返回NO:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gesture { CGPoint point = [gesture locationInView:self.viewB.superview]; return !CGRectContainsPoint(self.viewB.frame, point); }
您也可以选择子类化点击手势,然后将其行为更改为立即失败(即,将状态直接更改为UIGestureRecognizerStateFailed
)(如果点击的位置与UITableView
子视图一致)。
您还可以仅向主视图添加一个子视图,该子视图仅覆盖表视图上方主视图的空间,然后向其添加点击手势,这样您就不必处理任何重叠的手势识别器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.