UITapGestureRecognizer不会取消点击UITableView元素

时间:2017-09-06 09:41:30

标签: ios objective-c uitableview uitapgesturerecognizer

我已经实现了UITableView,其中每个单元格都包含一些按钮 为了检测用户是否在桌面上点击,我添加了UITapGestureRecognizer。

当用户点击它们时,我希望单元格中的按钮不执行任何操作。 我已经实现了这个选择器:

- (void) backgroundTouched:(UITapGestureRecognizer*)sender {
  UIView *view = sender.view;
  NSLog(@"backgroundTouched %@", view);
}

我看到当我点击桌子上的任何地方时,除非我点击UITableViewCell中包含的任何按钮,否则会调用此选择器。

我该如何避免?

以下是创建UITapGestureRecognizer的代码:

pragma mark UISearchControllerDelegate

- (void)didPresentSearchController:(UISearchController *)searchController
{
  NSLog(@"didPresentSearchController");
  self.cancelGesture = [UITapGestureRecognizer new];
  [self.cancelGesture addTarget:self action:@selector(backgroundTouched:)];
  self.cancelGesture.cancelsTouchesInView = YES;
  [self.tableView addGestureRecognizer:self.cancelGesture];
}

2 个答案:

答案 0 :(得分:1)

如果您不希望按钮执行任何操作,请禁用按钮的userInteractionEnabled。

cell.addCashButton.userInteractionEnabled = NO;

答案 1 :(得分:0)

我的建议:

表有自己的触摸操作工具使用它的委托方法didSelectRowAtIndexPath

如果您在自定义单元格中使用UIButton,则可以在UITapGestureRecognizer中使用按钮cellForRowAtIndexPath添加按钮操作方法,而不是tag,如下所示< / p> cellForRowAtIndexPath方法

中的

cell.yourButton.tag = indexPath.row
[cell.yourButton addTarget:self  action:@selector(myButtonActionMethod:)  forControlEvents:UIControlEventTouchUpInside]

并声明按钮操作方法

-(void) myButtonActionMethod:(UIButton*)sender
 {
    NSLog(@"you clicked on button %@", sender.tag);
 }