iPhone - 检测对 UITableViewCell 子视图的触摸
Posted
技术标签:
【中文标题】iPhone - 检测对 UITableViewCell 子视图的触摸【英文标题】:iPhone - Detect touches on subview of UITableViewCell 【发布时间】:2012-03-16 21:22:13 【问题描述】:我正在使用包含 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 中的状态是什么?
【问题讨论】:
【参考方案1】:尝试为此委托方法返回 YES - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
如果你想检测点击动作,请使用UITapGestureRecognizer
【讨论】:
+1,UIGestureRecognizer
是一个抽象基类,不识别任何手势。您需要使用它的子类之一。 (见:developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/…)以上是关于iPhone - 检测对 UITableViewCell 子视图的触摸的主要内容,如果未能解决你的问题,请参考以下文章