繁体   English   中英

子视图在iOS7中未收到触摸

[英]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中可能出什么问题的任何想法? 提前致谢!

您可以通过以下两种方式处理此问题:

  1. 您可以使用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的位置包含在viewBframe ,则编写gestureRecognizerShouldBegin返回NO:

       - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gesture { CGPoint point = [gesture locationInView:self.viewB.superview]; return !CGRectContainsPoint(self.viewB.frame, point); } 
  2. 您也可以选择子类化点击手势,然后将其行为更改为立即失败(即,将状态直接更改为UIGestureRecognizerStateFailed )(如果点击的位置与UITableView子视图一致)。

  3. 您还可以仅向主视图添加一个子视图,该子视图仅覆盖表视图上方主视图的空间,然后向其添加点击手势,这样您就不必处理任何重叠的手势识别器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM