我如何解雇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:
方法比单独的文本字段resignFirstResponder
要resignFirstResponder
,但由于某种原因,直到最近我才发现它。
有些情况下文本字段不是第一响应者,而是键盘在屏幕上。 在这些情况下,上述方法不能closures键盘。
一个如何到达的例子:
- 以编程方式在屏幕上推ABPersonViewController; 打开任何联系人;
- 触摸“笔记”字段(成为第一个响应者并触发键盘);
- 在任何其他字段上向左滑动以使“删除”button出现;
- 在这一点上,你没有第一个响应者之间的文本字段(只是检查编程),但键盘仍然在那里。 调用[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]; }
我发现endEditing
和resignFirstResponder
失败的情况。 在这种情况下,这对我有效。
[[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]; }
-
在Xcode中设置“退出结束”事件(右键单击文本字段)。
-
实现这个方法:
-(IBAction) closeKeyboard:(id) sender { [_txtField resignFirstResponder]; }