iPhone - 检测UITableViewCell子视图上的触摸

3

我正在使用一个包含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]。但是直接将图像视图添加到单元格中也会得到相同的结果。
根据这篇类似帖子上的答案,这是iOS 5.0中已知的一个bug;解决方法是重写委托方法来强制手势识别器开始:

修复方法是在手势识别器的委托中重写-gestureRecognizerShouldBegin:并返回YES。这个bug应该在未来的iOS 5.x版本中得到修复。只要你不使用新的UITableViewCell复制/粘贴API,这样做就是安全的。

我尝试过这种方法,但是委托方法从未被调用。我设置了delegate属性(见上文)并实现了<UIGestureRecognizerDelegate>如下:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    NSLog(@"gesture delegate method called");
    return YES;
}

有人知道为什么这个还是不能工作吗?或者在iOS 5.1中这个bug的状态是什么?

1个回答

6

尝试在这个代理方法中返回 YES:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

如果要检测轻拍操作,请使用 UITapGestureRecognizer


1
+1,“UIGestureRecognizer”是一个抽象基类,不会识别任何手势。您需要使用它的子类之一。(请参见:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIGestureRecognizer_Class/Reference/Reference.html) - Ahti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接