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];
}
答
如果你不希望你的按钮做任何事情,禁用按钮的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);
}
PL。清除你的关注,你想禁用点击表或按钮? – Krunal
禁用按钮。现在当我点击按钮按钮动作被调用,手势选择器不会。 我想以其他方式 – RuLoViC