iOS点击识别器捕捉所有点击

Posted

技术标签:

【中文标题】iOS点击识别器捕捉所有点击【英文标题】:iOS tap recognizer to catch all taps 【发布时间】:2015-09-27 21:53:43 【问题描述】:

我想要一个非常简单的东西 - 在我的顶部控制器(即导航控制器)中设置一个点击手势识别器,它将捕捉视图上任何地方的所有点击。目前,当我点击一个按钮时,系统甚至不会打扰我的识别器(gestureRecognizer:shouldReceiveTouch: 委托方法除外,我返回YES)。相反,它只是执行一个按钮单击。所以无论如何我都想在视图层次结构上安装“最强”的识别器。

【问题讨论】:

当有人按下按钮时,您希望点击和按钮同时触发吗? developer.apple.com/library/prerelease/ios/documentation/… 不,一次只有一个在工作。在我的例子中——我打开了一个抽屉,它只占据了屏幕的一部分,其余的 UI 都在它下面。然后我在抽屉外面敲了敲,它就关上了。当下面的布局中有一个按钮时,它会从我那里偷走点击。 【参考方案1】:

您可以尝试在所有其他视图之上放置一个空的 UIView 并向其添加 UITapGestureRecognizer。我们对帮助覆盖做类似的事情。最大的问题是弄清楚如何以及何时忽略触摸,以便底层按钮在需要时获取它们。

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    UIButton *b = [UIButton buttonWithType:UIButtonTypeInfoDark];
    b.frame = CGRectMake(50,50, b.bounds.size.width, b.bounds.size.height );
    [self.view addSubview:b];

    UIView *invisibleView = [[UIView alloc] initWithFrame:self.view.bounds];
    invisibleView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [invisibleView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHit:)]];
    [self.view addSubview:invisibleView];


-(void)tapHit:(UITapGestureRecognizer*)tap 
    NSLog( @"tapHit" );

@end

【讨论】:

以上是关于iOS点击识别器捕捉所有点击的主要内容,如果未能解决你的问题,请参考以下文章

创建一个捕捉点击但对所有其他手势透明的 UIView

NativeScript:如果用户点击 RadListView 中的空白空间,我如何捕捉点击事件?

捕捉使用 jQuery 执行的任何点击

在 SwiftUI 中的表单上捕捉点击手势

Android ListView OnItemClickListener 没有捕捉到内部项目点击事件

如何捕捉鼠标点击事件到重叠的ItemsControl