我已经实现了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];
}
答案 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);
}