我如何解雇iOS键盘?

我有一个UITextfield,我想解雇键盘。 无论使用什么代码,我似乎无法使键盘消失。

[myTextField resignFirstResponder] 

这里是pipe理键盘部分的第二段。

如果您有多个文本字段,并且不知道哪一个是第一响应者(或者您根本无法访问您编写此代码的任何地方的文本字段),则可以在包含文本字段的父视图中调用endEditing:

在视图控制器的方法中,它看起来像这样:

 [self.view endEditing:YES]; 

该参数强制文本字段退出第一响应者状态。 如果您使用委托来执行validation,并希望在文本字段的内容有效之前停止所有操作,则还可以像这样编写代码:

 BOOL didEndEditing = [self.view endEditing:NO]; if (didEndEditing) { // on to the next thing... } else { // text field must have said to first responder status: "never wanna give you up, never wanna let you down" } 

endEditing:方法比单独的文本字段resignFirstResponderresignFirstResponder ,但由于某种原因,直到最近我才发现它。

有些情况下文本字段不是第一响应者,而是键盘在屏幕上。 在这些情况下,上述方法不能closures键盘。

一个如何到达的例子:

  1. 以编程方式在屏幕上推ABPersonViewController; 打开任何联系人;
  2. 触摸“笔记”字段(成为第一个响应者并触发键盘);
  3. 在任何其他字段上向左滑动以使“删除”button出现;
  4. 在这一点上,你没有第一个响应者之间的文本字段(只是检查编程),但键盘仍然在那里。 调用[view endEditing:YES]什么都不做。

在这种情况下,您还需要让视图控制器退出编辑模式:

 [viewController setEditing:NO animated:YES]; 

我build议你在你的头文件中添加和操作:

 -(IBAction)removeKeyboard; 

在实现中,写下这样的内容:

 -(IBAction)removeKeyboard { [self.textfield resignFirstResponder]; } 

在NIB文件中,从UITextFiled连接到选项DidEndOnExit的文件所有者。 这样,当你按回车时,键盘将消失。

希望能帮助到你!

在你的视图控制器YourViewController.h文件中,确保你实现了UITextFieldDelegate协议:

 @interface YourViewController : <UITextFieldDelegate> @end 

然后,在YourViewController.m文件中,实现以下实例方法:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.yourTextField1 resignFirstResponder]; [self.yourTextField2 resignFirstResponder]; ... [self.yourTextFieldn resignFirstResponder]; } 

我发现endEditingresignFirstResponder失败的情况。 在这种情况下,这对我有效。

 [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; [self setEditing:NO]; 

如果你不知道哪个textField是第一个响应者,你可以find它。 我使用这个function:

 UIView *resignFirstResponder(UIView *theView) { if([theView isFirstResponder]) { [theView resignFirstResponder]; return theView; } for(UIView *subview in theView.subviews) { UIView *result = resignFirstResponder(subview); if(result) return result; } return nil; } 

然后在你的代码调用中:

  UIView *resigned = resignFirstResponder([UIScreen mainScreen]); 

这将退出一个特定的文本字段

 // Swift TextField.resignFirstResponder() // Objective C [TextField resignFirstResponder]; 

要退出任何文本字段,请使用以下代码

 // Swift self.view!.endEditing(true) // Objective C [self.view endEditing:YES]; 

你只需要replace你的yourTextFieldName ,你猜对了! 你的文本框。 这将closures键盘。

 [yourTextFieldName resignFirstResponder]; 
 -(void)methodName { [textFieldName resignFirstResponder]; } 

用didEndOnExit调用此方法(methodName)

对于Swift 3

你可以像这样隐藏键盘:

 textField.resignFirstResponder() 

如果要在用户按下“intro”button时隐藏键盘,则必须实现以下UITextFieldDelegate方法:

 func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true } 
 -(void)textFieldDidBeginEditing:(UITextField *)textField { // your code [textField reloadInputViews]; } 
  1. 在Xcode中设置“退出结束”事件(右键单击文本字段)。

    截图

  2. 实现这个方法:

     -(IBAction) closeKeyboard:(id) sender { [_txtField resignFirstResponder]; }