ios - UITapGestureRecognizer 点击 self.view 但忽略 subview

标签 ios uitapgesturerecognizer

我需要实现一个功能,当我双击 self.view(UIViewController 的 View )时将调用一些代码。但问题是我在此 View 上有其他 UI 对象,我不想将任何识别器对象附加到所有对象。我在下面找到了如何在我的 View 上做手势的方法,我知道它是如何工作的。现在我处于障碍面前,选择哪种方式来创建这个忽略 subview 的识别器。有任何想法吗?谢谢。

UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
[doubleTap setNumberOfTapsRequired:2];
[self.view addGestureRecognizer:doubleTap];

最佳答案

您应该在 self 对象中采用 UIGestureRecognizerDelegate 协议(protocol),并调用以下方法来检查 View 。在此方法中,根据 touch.view 检查您的 View 并返回适当的 bool 值(是/否)。像这样:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    if ([touch.view isDescendantOfView:yourSubView]) {
        return NO;
    }
    return YES;
}

编辑:请同时检查@Ian 的回答!

swift 5

// MARK: UIGestureRecognizerDelegate methods, You need to set the delegate of the recognizer
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
     if touch.view?.isDescendant(of: tableView) == true {
        return false
     }
     return true
}

关于ios - UITapGestureRecognizer 点击 self.view 但忽略 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15814697/

相关文章:

ios - 取消点击手势识别器

swift - 在以编程方式创建的 UITextView 上捕获 UITapGesture

android - React-native 如何在打开日期选择器时隐藏键盘

swift - 遍历scrollView,找到点击的imageView

ios - UITapGestureRecognizer 在 UIImageView 上工作,但不在 UILabel 上工作

ios - 使 ScrollView 在被拉到一半时自动拉到一侧?

ios - 在屏幕上绘制文本

iphone - 某些EKEvent与谓词不匹配

ios - Cocos2d - 奇怪的 CCMenu 和 CCMenuItem 行为 - 不正确的 HitTest 层顺序

ios - layerRectConverted(来自MetadataOutputRect :) issue