iPhone - 检测UITableViewCell子视图的触摸

时间:2012-03-16 21:22:13

标签: iphone ios uitableview uigesturerecognizer

我正在使用包含UIImageView子视图的单元格填充UITableView。我想检测图像视图上的触摸,所以我也添加了一个手势识别器。然而,没有任何东西被称为。这是我的代码:

UIImageView *delete = [[UIImageView alloc] initWithFrame:CGRectMake(1.0, 8.0, 33.0, 33.0)];
delete.image = [UIImage imageNamed:@"Delete.png"];
delete.userInteractionEnabled = YES;
delete.contentMode = UIViewContentModeCenter;

UIGestureRecognizer *gesture = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(deleteTapped)];
gesture.delegate = self;

[delete addGestureRecognizer:gesture];
[self.cellView addSubview:delete];

注意:我在技术上将图像视图添加到容器中,然后将其添加到单元格本身,因此[self.cellView addSubview:delete]。但是我有相同的结果直接将图像视图添加到单元格中。

根据类似帖子的this回答,这是iOS 5.0中的已知错误;解决方案是覆盖委托方法以强制手势识别器开始:

  

修复是在手势识别器的委托中覆盖-gestureRecognizerShouldBegin:并返回YES。应该在iOS 5.x的未来版本中修复此错误。只要您没有使用新的UITableViewCell复制/粘贴API,这只是安全的。

我试过这个,但委托方法永远不会被调用。我已设置delegate属性(参见上文)并按如下方式实施<UIGestureRecognizerDelegate>

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    NSLog(@"gesture delegate method called");
    return YES;
}

有没有人知道为什么这仍然不起作用?或者也许iOS 5.1中这个bug的状态是什么?

1 个答案:

答案 0 :(得分:6)

尝试为此委托方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

返回YES

如果您想检测点按操作,请使用UITapGestureRecognizer