在编辑UITextField时如何关闭键盘

kub*_*ubi 180 iphone cocoa-touch uitextfield uikeyboard ios

我知道当我想解开键盘时,我需要告诉我的UITextField辞职第一响应者,但我不知道如何知道用户何时按下键盘上的"完成"键.我可以留意通知吗?

kub*_*ubi 348

我将代表设置UITextField为我的ViewController班级.

在该课程中,我实现了以下方法:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

  • 其中任何一个都可以工作 - 文本字段在用户点击Return("Done",无论如何)键时发送其动作,并且还发送其委托-textFieldShouldReturn:. (2认同)

Jas*_*oco 47

如果将文本字段的DidEndOnExit事件连接到InterfaceBuilder中的操作(IBAction),则在用户解除键盘(使用返回键)时将发送消息,并且发送方将是对触发事件的UITextField的引用.

例如:

-(IBAction)userDoneEnteringText:(id)sender
{
    UITextField theField = (UITextField*)sender;
    // do whatever you want with this text field
}
Run Code Online (Sandbox Code Playgroud)

然后,在InterfaceBuilder中,将文本字段的DidEndOnExit事件链接到控制器上的此操作(或者用于链接UI中的事件的任何操作).每当用户输入文本并解除文本字段时,控制器将发送此消息.

  • 你可以编辑这个答案,以便它提到WHICH事件要接线吗?这显然比设置代表更好. (2认同)

小智 32

您还可以在控制器中创建方法

 -(IBAction)editingEnded:(id)sender{
    [sender resignFirstResponder]; 
}
Run Code Online (Sandbox Code Playgroud)

然后在IB连接检查器中连接事件"退出时结束".


小智 19

库比,谢谢.你的代码工作了.只是为了明确(对于新手来说)就像你说你必须将UITextField's' 设置delegate为等于文本字段所在的ViewController.无论何时何地,您都可以这样做.我选择了这个viewDidLoad方法.

- (void)viewDidLoad 
{
    // sets the textField delegates to equal this viewController ... this allows for the keyboard to disappear after pressing done
    daTextField.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)


mat*_*att 18

这是一个获取自动键盘解雇行为的技巧,完全没有代码.在nib中,在Identity检查器中编辑First Responder代理对象,添加新的第一响应者操作; 我们称之为dummy:.现在将文本字段的Did End on Exit事件挂钩到dummy:First Responder代理对象的操作.而已!由于文本字段的真的结束就退出事件现在有一个行动目标对的,当用户点击返回文本字段自动解散它的键盘; 并且由于没有为响应者链发送的消息找到处理程序没有惩罚,即使没有dummy:任何地方的实现,应用程序也不会崩溃.


小智 11

只需添加

[textField endEditing:YES];
Run Code Online (Sandbox Code Playgroud)

您要在哪里禁用键盘并显示选择器视图.


Saf*_*med 10

在Swift中,您可以在Controller中编写IBAction ,并将文本字段的Did End On Exit事件设置为该操作

@IBAction func returnPressed(sender: UITextField) {
    self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)


Gul*_*iya 10

Swift 4.2 它会工作 100%

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!


    override func viewDidLoad() {
        super.viewDidLoad()

        self.textField.delegate = self

    }

    // hide key board when the user touches outside keyboard

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

    // user presses return key

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

}
Run Code Online (Sandbox Code Playgroud)