UITableView didSelectRowAtIndexPath和UITapGestureRecognizer冲突

时间:2012-01-24 23:33:00

标签: iphone objective-c ipad uitableview uitapgesturerecognizer

所以我有一个视图,它有一些视图,在图像上有一个UITapGestureRecognizer,我有一个表视图。问题在于,当我点击表格视图单元格并且其后面有一个点击手势识别器的视图时,也会执行该UITapGestureRecognizer的操作。问题是如何禁用它以便在执行表视图didSelectRowAtIndexPath时不执行轻击手势识别器操作?顺便说一句我设置:

 tapGestureRecognizer.cancelsTouchesInView = NO;

我也尝试过:

- (IBAction) handleTapGesture:(UITapGestureRecognizer *) sender {

    if ([sender.view isKindOfClass:[TileViewController class]]){
        NSLog(@"CANCEL THIS");
    }

   if ([sender.view isKindOfClass:[UITableView class]]){
        NSLog(@"CANCEL THIS");
    }
}

但它从未进入过if语句

3 个答案:

答案 0 :(得分:2)

确保您将轻拍手势识别器添加到图像,而不是整个视图或桌面视图。

[myImage addGestureRecognizer:tapGestureRecognizer];

答案 1 :(得分:2)

您还可以通过实施gestureRecognizer:shouldReceiveTouch:并使用视图的类来确定要执行的操作来管理此操作。这种方法的优点是不会在直接围绕表格的区域中屏蔽点击(这些区域的视图仍然来自UITableView实例,但它们不代表单元格)。

警告:假设Apple不会更改类名。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ![NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"];
}

答案 2 :(得分:0)

yourView.userInteractionEnabled = NO;

在您放入表格单元格的视图上。这应取消对所有子视图的触摸。您可以在cellForRowAtIndexPath函数中轻松设置它。