iOS - 忽略点击手势

Posted

技术标签:

【中文标题】iOS - 忽略点击手势【英文标题】:iOS - ignoring a tap gesture 【发布时间】:2011-08-24 08:20:25 【问题描述】:

我在自定义表格单元格中有一个 UITapGestureRecognizer,它什么都不做(删除点击单元格以选择它的能力)。这很好用,但是单元格中有一些按钮(子视图)无法点击,因为点击手势会处理整个单元格区域。

所以它就像检测触摸手势何时超过其中一个按钮并返回 false 以取消该特定手势一样简单,对吧?好吧,不适合我...

我已删除逻辑并在手势识别器中简单地返回 NO,但我仍然无法点击按钮。

- (BOOL)ignoreTap:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch

    return NO;

这里有什么我遗漏的吗?

【问题讨论】:

【参考方案1】:

解决方案更简单:您不应该使用手势识别器来执行此操作。如果您不希望某个单元格处于可选状态,您可以做两件事:

-tableView:willSelectRowAtIndexPath:返回nil使其无法选择 将单元格的selectionStyle 设置为UITableViewCellSelectionStyleNone 以移除高亮效果

这样做应该可以保留您的按钮功能。


编辑:如果你不想这样做,那么你可以做你最初尝试的事情——除了我认为你的方法名称错误,应该是这样的:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

【讨论】:

我不想删除选择单元格的功能。用户仍然可以使用其他手势来选择它。 你是绝对正确的。多年来(这对我来说一直是一个持续的问题)我认为人们在谈论手势识别器的动作......我没有意识到它也可以有一个委托并且方法签名是如此相似:)感谢您花时间为我回答这个问题:) 是的,这可能有点令人困惑...您可以为操作自定义方法名称,但委托方法始终相同!【参考方案2】:

为此,我制作了一个这样的自定义按钮:

- (void)awakeFromNib

    [super awakeFromNib];
    [self addTarget:self action:@selector(touchDown) forControlEvents:UIControlEventTouchDown];
    [self addTarget:self action:@selector(touchUpInside) forControlEvents:UIControlEventTouchUpInside];
    [self addTarget:self action:@selector(touchUpOutside) forControlEvents:UIControlEventTouchUpOutside];


- (void)touchDown

    self.imageView.image = [UIImage imageNamed:@"ButtonPressed.png"];


- (void)touchUpInside

    self.imageView.image = [UIImage imageNamed:@"Button.png"];


- (void)touchUpOutside

    self.imageView.image = [UIImage imageNamed:@"Button.png"];


- (void)setHighlighted:(BOOL)highlighted

    return;

【讨论】:

以上是关于iOS - 忽略点击手势的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 将点击手势添加到 UITextField

iOS解决单击手势和UITableView的点击事件冲突

iOS - 在图像视图上点击手势问题

iOS:UIImageView 不响应动画之间的点击手势

iOS将点击手势添加到UIImageView

iOS 手势获取cell位置点击cell获取indexpath