当我在UITextField中按回车键时如何隐藏键盘?


148

单击文本字段将使键盘出现。用户按下返回键时如何隐藏它?


13
Stack Overflow的好处是已经回答了许多问题,尤其是简单的问题。因此,在问之前,请先寻找答案。看,这很简单:stackoverflow.com/search?
q=iphone+hide+keyboard

这是UITextfield的子类,可根据文本/字符串条件动态更改UIReturnKey:github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive 2015年

Answers:


285

首先让您的文件代理为UITextField

@interface MYLoginViewController () <UITextFieldDelegate>

@end

然后将此方法添加到您的代码中。

- (BOOL)textFieldShouldReturn:(UITextField *)textField {        
    [textField resignFirstResponder];
    return YES;
}

还添加 self.textField.delegate = self;


1
很好奇,为什么不需要<UITextFieldDelegate>?通常,在这种情况下,您会看到警告。
pixelfreak 2012年

7
如果你让使用Interface Builder那么你的文件代表<UITextFieldDelegate>是不是在.h文件中必要的..
SAURABH

1
在.h文件中添加<UITextFieldDelegate>并在viewdidload [yourTextField setDelegate:self]中设置委托;将完成!
Umit Kaya 2015年

@Saurabh故事板创建的VC有何特别之处?
Paul Brewczynski

62

viewDidLoad声明中:

[yourTextField setDelegate:self];

然后,包括委托方法的重写:

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

6
+1 setDelegate:提醒。肯定已经忘记了,以前的代码无法正常工作。
Piperchester

2
这不应该是textField,而不是正在传递的yourTextField吗?
Clive Jefferies 2014年

是一种声明您的textField的代表的说法
oscar castellon 2014年

1
<UITextFieldDelegate>应该位于.h文件中,否则将出现警告!
乌米特卡亚(Umit Kaya)

22

Swift中尝试一下,

步骤1:将委托设置为自己的委托textField

textField.delegate = self

步骤2:在您的类声明下方添加此UITextFieldDelegate,

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

迅速执行以下操作:
首先在您的ViewController工具中执行此操作UITextFieldDelegate

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

现在,将委托添加到TextField中,当您按viewDidLoad下面的方法或在初始化它的位置点击返回时,您要在其中关闭键盘。例如。

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

现在添加此方法。

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
如果您在IB中设置了委托,则第二步不是必需的。
hris.to

出现(在斯威夫特的当前版本)应该有前一个下划线“文本框”
布莱斯Sandlund

2

试试这个,

[textField setDelegate: self];

然后,在textField委托方法中

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

这不是最佳做法。
orafaelreis 2014年

接口定义中需要UITextFieldDelegate。
Alp Altunel

@ AlpAltunel:感谢您的评论,这是4年前了。
Vineesh TP

1

设置方法的委托UITextField,并在textFieldShouldReturn方法中编写以下两行:

[textField resignFirstResponder];
return YES;

而已。在编写代码之前,请不要忘记UITextField从属性窗口中设置a的代表并将Return键类型设置为“完成”。(命令+ shift + I)。


1

您可以将“已触发的主要操作”(在UITextField上单击鼠标右键)与IBAction连接,并且可以辞退第一响应者(无委派)。示例(快速4):

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

使用情节提要的首选方式。
lal

1

斯威夫特4

UITextField在视图控制器中设置的委托field.delegate = self,然后:

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

您将如何处理希望用户按下返回键“跳至”下一个文本字段,直到最后一个然后退出的问题?同样在SwiftUI中。
Learn2Code

@ Learn2Code成为管理员,收集文本字段和链,最后一个将触发完成功能。
dimpiax

1

如果要隐藏特定用途的键盘 [self.view resignFirstResponder]; 如果要隐藏任何用途的键盘[self.view endEditing:true];



0

好的,我认为对于新手来说,事情可能会有些混乱。我认为正确的答案是以上所有因素的结合,至少在Swift4中是这样。

创建扩展或使用您想在其中使用ViewController的方法,但请确保实现UITextFieldDelegate。出于可重用性的考虑,我发现使用扩展更容易:

extension UIViewController : UITextFieldDelegate {
    ...
}

但是替代方法也可以:

class MyViewController: UIViewController {
    ...
}

添加方法textFieldShouldReturn(取决于扩展名或ViewController中的上一个选项)

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

在viewDidLoad方法中,将文本字段的委托设置为self

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

那应该是全部。现在,当你按下returntextFieldShouldReturn应该叫。


0

定义此类,然后将您的文本字段设置为使用该类别,当自动按回车键时,这将使整个隐藏键盘自动化。

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        textField.resignFirstResponder()
        return true
    }

}

然后,您在情节提要中需要做的就是将字段设置为使用类:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.