ios - 检测点击 UIView 的 "empty space"

标签 ios objective-c cocoa-touch uiview event-handling

我有一个看起来像那样的 View 层次结构

UIScrollView
 |
 +- UIView
     |
     +- UITextField
     +- UITextField
     +- UIButton

我想要的是让点击其中一个文本字段并在屏幕上看到键盘的用户能够点击 UIView 的“空白区域”来隐藏键盘。因此,例如,我不希望 UIButton 的事件冒泡到 UIView(这正是我将 UITapGestureRecognizer 添加到 UIView 时发生的情况)。

如何实现所需的功能?

最佳答案

在您的 viewDidLoad 方法中添加此手势识别器:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
gestureRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:gestureRecognizer];

然后添加dismissKeyboard方法:

- (void) dismissKeyboard{
   [YOURFIELDHERE resignFirstResponder];
} 

您还需要添加它以使按钮仍然可点击并且不会被手势识别器覆盖:

gestureRecognizer.delegate = self; // in viewDidLoad
<UIGestureRecognizerDelegate> //in your header file

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

  if ([touch.view isKindOfClass:[UIButton class]]){
    return NO;
  }
  return YES; // handle the touch
}

关于ios - 检测点击 UIView 的 "empty space",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11101502/

相关文章:

iphone - 标签栏中需要 6 个标签

ios - iOS 10[ objective-c ]如何实现推送通知?

ios - UITabBarItem 图像为蓝色且未更改

ios - seekToTime 不适用于 iOS 9 中的实时 Assets

ios - 在锁屏 iOS 上显示交互式本地推送通知

android - 从 Apple Store 安装的应用程序会自动创建主屏幕快捷方式图标吗?

iOS:popToRootViewControllerAnimated 后跟 performSegue 不起作用

iphone - 在 iOS 上查看大型 PDF 的最佳方式是什么?

objective-c - 我什么时候应该对 IBOutlets 使用 weak 或 strong 限定符?

android - Ionic config.xml 针对不同平台的不同小部件 id