当用户单击视图的背景时,如何使键盘消失?

Posted

技术标签:

【中文标题】当用户单击视图的背景时,如何使键盘消失?【英文标题】:How do I make the keyboard go away when a user clicks on the background of the view? 【发布时间】:2012-04-23 23:10:12 【问题描述】:

我的 ios 应用中有一个 UITextField。当用户输入文本并单击 Return 时,键盘会因为调用带有“resignFirstResponder”的 IBAction 而消失。

但是,XCode 不允许我将一条线从 UIView 本身拖到文件所有者。如何将触摸 UIView 的背景与使键盘消失的 IBAction 相关联?

【问题讨论】:

【参考方案1】:

您可以使用 UITapGestureRecognizer。见:Dismiss keyboard by touching background of UITableView

所以不要使用tableview,只需将其添加到您的视图中即可:

UITapGestureRecognizer *gestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)] autorelease];
gestureRecognizer.cancelsTouchesInView = NO; //so that action such as clear text field button can be pressed
[self.view addGestureRecognizer:gestureRecognizer];

还有隐藏键盘的方法

- (void) hideKeyboard 
    [self.view endEditing:YES];

【讨论】:

【参考方案2】:

您已经注意到,您无法从 UIView 拖动到文件所有者以将操作与触摸相关联。

解决此问题的方法是将背景视图的类从 UIView 更改为 UIControl,并将从那里的操作连接到控制器中的方法以停止编辑。

这是因为 UIControl 可以响应触摸事件,而 UIView 不能,但 UIControl 是 UIView 的子类,因此可以用来代替 UIView。

我不久前写了一个example project,它使用了这种技术。查看secondViewController 的xib 文件,了解我如何更改背景视图的类并将其连接到控制器中的一个动作以关闭键盘。

【讨论】:

【参考方案3】:

使用 touchesBegan 和 Event 并在视图上结束编辑:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

  [self.view endEditing:YES];

  

【讨论】:

【参考方案4】:

一种简单的方法是在视图后面创建一个大的透明 UIButton。

【讨论】:

大声笑,这确实是一个有趣的解决方案。 (PD:不要投票给你或任何东西)

以上是关于当用户单击视图的背景时,如何使键盘消失?的主要内容,如果未能解决你的问题,请参考以下文章

模态表单消失而无需单击表单

JQuery Mobile:单击文本字段时如何禁用默认键盘?

searchController 在单击搜索项时消失

单击时如何使 TextView 闪烁其背景?

对话框消失时键盘隐藏

当软键盘可见时,无法单击按钮