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 子视图的触摸的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式检测 iPhone 6 和 6 Plus 视图模式 [重复]

iPhone - 使用陀螺仪/加速度计检测运动

有没有办法检测 iphone 上的 rfid 芯片?

我的 iphone 应用程序如何检测自己的版本号?

iPhone 检测到用户向上移动了他们的设备

swift项目第二天:初始化项目