当用户点击视图背景时,如何让键盘消失?

时间:2012-04-23 23:10:13

标签: objective-c ios xcode

我的iOS应用中有一个UITextField。当用户输入文本并单击Return时,由于使用“resignFirstResponder”调用IBAction,键盘会消失。

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

4 个答案:

答案 0 :(得分:10)

您可以使用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];
}

答案 1 :(得分:1)

您已经注意到,您无法从UIView拖动到文件的所有者,以便通过触摸来关联动作。

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

那是因为UIControl可以响应触摸事件,UIView不响应,但是UIControl是UIView的子类,因此它可以代替UIView使用。

前一段时间我写了example project使用这种技术。看一下secondViewController的xib文件,看看我是如何更改背景视图的类,并将其连接到控制器中的一个动作来关闭键盘。

答案 2 :(得分:0)

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

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

  [self.view endEditing:YES];

  }

答案 3 :(得分:-1)

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