我有一个 UITextfield,我想解除键盘。无论我使用什么代码,我似乎都不能让键盘消失。
[myTextField resignFirstResponder]
这里 ,显示和隐藏键盘部分的第二段。
我建议您在头文件中添加和操作:
-(IBAction)removeKeyboard;
在实现中,写下如下代码:
-(IBAction)removeKeyboard { [self.textfield resignFirstResponder]; }
在 NIB 文件中,从 UITextFile 连接到 DidEndOnExit 选项上的文件所有者。这样,当你按返回键时,键盘就会消失。
希望能有帮助!
如果您有多个文本字段,并且不知道哪个是第一响应者(或者您根本无法从您正在编写代码的地方访问文本字段) ,您可以在包含文本字段的父视图上调用 endEditing:。
endEditing:
在视图控制器的方法中,它看起来是这样的:
[self.view endEditing:YES];
该参数强制文本字段放弃第一响应者状态。如果您使用委托来执行验证,并且希望在文本字段的内容有效之前停止所有操作,您也可以这样编写代码:
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
你只需要将 yourTextFieldName替换成,你猜对了! 你的文本字段。这会关闭键盘。
yourTextFieldName
[yourTextFieldName resignFirstResponder];
-(void)methodName { [textFieldName resignFirstResponder]; }
使用 did EndOnExit 调用此方法(methodName)
如果你不知道哪个 textField 是第一个响应者,你可以找到它:
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]);
在视图控制器 YourViewController.h 文件中,确保实现了 UITextFieldCommittee 协议:
@interface YourViewController : <UITextFieldDelegate> @end
然后,在 YourViewController.m 文件中实现以下实例方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.yourTextField1 resignFirstResponder]; [self.yourTextField2 resignFirstResponder]; ... [self.yourTextFieldn resignFirstResponder]; }
有些情况下,没有文本字段是第一个响应者但键盘在屏幕上。 在这些情况下,上述方法无法忽略键盘。
如何到达那里的一个例子:
在这种情况下,您还需要要求视图控制器退出编辑模式:
[viewController setEditing:NO animated:YES];
我发现了一个 endEditing和 resignFirstResponder失败的案例,这对我在这些案例中起了作用。
endEditing
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil]; [self setEditing:NO];
UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)
这将引用一个特定的文本字段
// Swift TextField.resignFirstResponder() // Objective C [TextField resignFirstResponder];
使用以下代码辞去任何文本字段
// Swift self.view!.endEditing(true) // Objective C [self.view endEditing:YES];
-(void)textFieldDidBeginEditing:(UITextField *)textField { // your code [textField reloadInputViews]; }
在 Xcode 设置“ Did End On Exit”事件(右键单击文本字段)。
实现这个方法:
-(IBAction) closeKeyboard:(id) sender { [_txtField resignFirstResponder]; }
对于 Swift 3
你可以这样隐藏键盘:
textField.resignFirstResponder()
如果你想隐藏键盘时,用户按“介绍”按钮,你必须实现以下 UITextFieldDelegate方法:
UITextFieldDelegate
func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true }
3个简单快捷的步骤
将 UITextFieldDelegate添加到你的类中,如下所示:
class RegisterVC: UIViewController, UITextFieldDelegate { //class implementation }
在类实现中,添加委托函数 textFieldShouldEndEditing::
textFieldShouldEndEditing:
internal func textFieldShouldReturn(_ textField: UITextField) -> Bool { self.view.endEditing(true) return true }
作为最后一步,将 UITextField(s)委托设置为 self,在适当的位置,例如,在 viewDidLoad函数内:
UITextField
viewDidLoad
override func viewDidLoad(){ super.viewDidLoad() myTextField1.delegate = self myTextField2.delegate = self .. .. }
现在,只要用户点击返回键,键盘就会关闭。
我准备了一个例子片段太,你可以检查它从 给你。
放弃应用程序中的任何文本字段
UIApplication.shared.keyWindow?.endEditing(true)
这种方法是干净的,并且保证能够工作,因为根据定义,keyWindow 是显示键盘(来源)的所有可能视图的根视图:
键窗口接收键盘和其他非触摸相关事件。一次只有一个窗口可能是键窗口。
作为最后的手段
let dummyTextView = UITextView(frame: .zero) view.addSubview(dummyTextView) dummyTextView.becomeFirstResponder() dummyTextView.resignFirstResponder() dummyTextView.removeFromSuperview()