UITapGestureRecognizer不取消轻拍UITableView元素

问题描述:

我已经实现了UITableView,其中每个单元格包含一些按钮 为了检测用户是否点击了表格,我添加了UITapGestureRecognizer。UITapGestureRecognizer不取消轻拍UITableView元素

我希望单元格中的按钮在用户点击它们时不做任何事情。 我已经实现了这个选择:

- (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]; 
} 
+0

PL。清除你的关注,你想禁用点击表或按钮? – Krunal

+0

禁用按钮。现在当我点击按钮按钮动作被调用,手势选择器不会。 我想以其他方式 – RuLoViC

如果你不希望你的按钮做任何事情,禁用按钮的userInteractionEnabled。

cell.addCashButton.userInteractionEnabled = NO; 
+0

这可行。虽然它在我看来不是非常优雅的解决方案,因为我必须为每个单元启用/禁用,具体取决于searchController是否处于活动状态 – RuLoViC

我的建议:

表有自己的触摸动作设施使用它的委托方法didSelectRowAtIndexPath

如果你是在自定义单元格使用UIButton然后代替UITapGestureRecognizer您可以在cellForRowAtIndexPath添加按钮操作方法带按钮的tag如下

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); 
}