我正在使用一个包含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的状态是什么?