【问题标题】:Does Button Tap Event Get Overridden by Tap Gesture Recognizer?点击手势识别器是否会覆盖按钮点击事件?
【发布时间】:2012-06-25 06:29:30
【问题描述】:

我有一个按钮,如果点击按钮以外的任何东西,我想让它消失。所以我为删除按钮设置了目标:动作:

[self.deleteButton addTarget:self action:@selector(deleteButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

随后将点击手势识别器添加到包含视图中:

[self.superview addGestureRecognizer:self.tapOutsideDelete];

当我这样做时,deleteButton 的动作没有被执行,好像按钮点击没有被识别。在这种情况下,手势识别器确实有效。但是当我点击 deleteButton 时它也有效,这让我认为点击手势识别器优先于按钮点击。

如果我删除手势识别器,deleteButton 可以正常工作。

我显然不明白如何同时处理这两个事件。我需要做什么?

(deleteButton 正在模仿表格视图单元格的删除按钮,但在这种情况下,我将它放在标题视图中。我希望调用一个方法来使删除按钮在我点击表格中的任何位置时消失,除了按钮本身,与在单元格中的工作方式相同。)

【问题讨论】:

  • 将手势识别器添加到 self.superview 而不是 self(或 self.view,如果它是视图控制器)可能会有点奇怪。这会将它添加到包含标题视图的表格视图中,而不是添加到标题视图中,这可能是也可能不是您想要的。

标签: cocoa-touch events uigesturerecognizer


【解决方案1】:

是的,点击手势首先会在点击时出现。你需要实现gestureRecognizer:shouldReceiveTouch:方法:

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

    if (touch.view == self.deleteButton) {
        return NO;
    }
    return YES;
}

【讨论】:

  • 谢谢。这非常有效。稍微挖掘了一下,发现这是UIGestureRecognizerDelegate协议的委托方法,所以委托指针也必须设置。
  • @Jim:对不起,我要补充一下。令人沮丧的是,网上有这么多 iOS 教程等并没有包含解决方案所需的所有信息,而我只是添加到其中。
猜你喜欢
  • 1970-01-01
  • 2017-07-13
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多