UITableViewCellContentView上的shouldReceiveTouch

Jim*_*y_m 13 objective-c uitableview uikit ios uitapgesturerecognizer

我试图忽略UITapGestureRecognizer在UITableView上点击以下内容:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
      if ([touch.view isKindOfClass:[UITableViewCellContentView class]]) {
          return NO; // ignore the touch
      }
      return YES; // handle the touch
}
Run Code Online (Sandbox Code Playgroud)

它不会编译:"使用未声明的标识符'UITableViewCellContentView'

没有文档的课程?需要子类?更好的方法来完成这个?

谢谢你的帮助.

Jim*_*y_m 40

这似乎是这样做的:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if([touch.view isKindOfClass:[UITableViewCell class]]) {
         return NO;
    }
    // UITableViewCellContentView => UITableViewCell
    if([touch.view.superview isKindOfClass:[UITableViewCell class]]) {
         return NO;
    }
    // UITableViewCellContentView => UITableViewCellScrollView => UITableViewCell
    if([touch.view.superview.superview isKindOfClass:[UITableViewCell class]]) {
         return NO;
    }
    return YES; // handle the touch
}
Run Code Online (Sandbox Code Playgroud)

  • 我在`iOS ver 7.0上的`touch.view.superview.superview`上找到它=>**第3次检查**... (2认同)

小智 10

你可以这样做.

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
            return NO;
        }else{
            return YES;
        }
    }
Run Code Online (Sandbox Code Playgroud)


Dur*_*adu 5

我刚刚遇到了这个问题,以下解决方案适用于所有iOS版本,没有Apple更改tableView视图层次结构的风险.Basicaly,保持对UITableView的引用:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
      if([touch.view isDescendantOfView:detailsTableView]) {
          return NO;
      }
      return YES;
   }

//isDescendantOfView:YES if the receiver is an immediate or distant subview of view or if view is the receiver itself; otherwise NO.
Run Code Online (Sandbox Code Playgroud)