如何关闭iOS键盘?

时间:2011-08-02 01:07:31

标签: ios keyboard

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

16 个答案:

答案 0 :(得分:189)

如果您有多个文本字段且不知道哪个是第一响应者(或者您只是无法从编写此代码的任何地方访问文本字段),则可以在{0}上调用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要好得多,但出于某种原因,我直到最近才发现它。

答案 1 :(得分:63)

[myTextField resignFirstResponder]

Here,显示和隐藏键盘部分的第二段。

答案 2 :(得分:8)

有些情况下没有文字字段是第一响应者,但键盘在屏幕上。 在这些情况下,上述方法无法解除键盘。

如何到达那里的一个例子:

  1. 以编程方式在屏幕上推送ABPersonViewController;打开任何联系人;
  2. 触摸“注释”字段(成为第一响应者并启动键盘);
  3. 在任何其他字段上向左滑动以显示“删除”按钮;
  4. 此时你在文本字段中没有第一响应者(只是以编程方式检查)但键盘仍在那里。调用[view endEditing:YES]什么都不做。
  5. 在这种情况下,您还需要让视图控制器退出编辑模式:

    [viewController setEditing:NO animated:YES];
    

答案 3 :(得分:6)

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

-(IBAction)removeKeyboard;

在实现中,写下这样的东西:

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

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

希望它有所帮助!

答案 4 :(得分:6)

在视图控制器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];
}

答案 5 :(得分:6)

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

ObjC

[[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)

答案 6 :(得分:2)

如果您不知道哪个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]);

答案 7 :(得分:2)

这将取消一个特定的文本字段

NSDate

要在代码

下面重新使用任何文本字段
// Swift
TextField.resignFirstResponder()

// Objective C
[TextField resignFirstResponder];

答案 8 :(得分:2)

辞去应用中的任何文字字段

UIApplication.shared.keyWindow?.endEditing(true)

这种方法干净且保证工作,因为keyWindow根据定义是显示键盘的所有可能视图的根视图(source):

  

键窗口接收键盘和其他非触摸相关事件。一次只有一个窗口可能是关键窗口。

答案 9 :(得分:2)

作为最后的手段

let dummyTextView = UITextView(frame: .zero)
view.addSubView(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()

答案 10 :(得分:1)

你只需要替换yourTextFieldName,你猜对了!你的文本域。这将关闭键盘。

[yourTextFieldName resignFirstResponder];

答案 11 :(得分:1)

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

使用didEndOnExit

调用此方法(methodName)

答案 12 :(得分:1)

Swift 3

你可以像这样隐藏键盘:

textField.resignFirstResponder()

如果您想在用户按“简介”按钮时隐藏键盘,则必须实施以下UITextFieldDelegate方法:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()

    return true
}

答案 13 :(得分:0)

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    // your code

    [textField reloadInputViews];
}

答案 14 :(得分:0)

3简单&amp;快速步骤

UITextFieldDelegate添加到您的课程中,如下所示:

class RegisterVC: UIViewController, UITextFieldDelegate {
    //class implementation 
}

在类实现中,添加委托函数textFieldShouldEndEditing:

internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return true
}

并且作为最后一步,在适当的地方将您的UITextField(s)代表设置为自己。例如,在viewDidLoad函数内部:

override func viewDidLoad(){
    super.viewDidLoad()
    myTextField1.delegate = self
    myTextField2.delegate = self
    ..
    ..
}

现在,只要用户点击返回键,键盘就会消失。

我也准备了一个示例代码段,您可以从here进行检查。

答案 15 :(得分:-1)

  1. 在Xcode中设置“在退出时结束”事件(右键单击文本字段)。

    Screenshot

  2. 实现此方法:

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