创建一个捕获点击的UIView,但对所有其他手势都是透明的

mjh*_*mjh 6 user-interface xcode uiscrollview gestures ios

我想实现以下目标.

场景:当用户键入特定文本字段时,iOS键盘在屏幕上.用户可以点击键盘和文本字段之外的任何位置来关闭键盘(不激活任何可见的按钮).此外,用户可以拖动键盘外部并观察可滚动视图的某些布置上的正常拖动行为.

从概念上讲,我UIView在屏幕的大部分区域放置了一个"封面" ,其行为如下:

  1. 如果用户点击封面,那么我捕捉到那个点击(这样我就可以,例如,关闭键盘).通过拦截UIView子类中的触摸事件或使用轻击手势识别器,可以轻松实现这一点.

  2. 如果用户拖动盖子,则盖子忽略转发这些触摸; 它们被下面的层接收,就像它们没有盖子一样.

因此:用户应该能够滚动封面下方的内容,但不能点击封面下方的内容.键盘和文本字段的"外部"点击应该关闭键盘(和封面),但不应激活任何东西.

我怎样才能做到这一点?

Hol*_*bæk 0

1:向视图添加点击手势识别器:

    //Adding tap gesture
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
    tapGesture.numberOfTapsRequired = 1;
    [self.view addGestureRecognizer:tapGesture];
Run Code Online (Sandbox Code Playgroud)

2:在handleTapGesture中你辞去键盘的FirstResponder

- (void)handleTapGesture:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateRecognized) {
       //Resign first responder for keyboard here
    }
}
Run Code Online (Sandbox Code Playgroud)

对上面的答案进行了一些详细说明。UIGestureRecognizerStateRecognized 确保识别的是单个选项卡事件。

这是您想要的功能吗?