如何隐藏键盘在迅速按下返回键?

我正在使用UITextfied,而点击文本键盘出现,但当我按下返回键,键盘没有消失。我使用了以下代码:

func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}

方法resignfirstresponder没有进入函数。

268977 次浏览

return true部分只告诉文本字段是否允许返回 你必须手动告诉文本字段取消键盘(或者它的第一个响应器是什么),这是通过resignFirstResponder()完成的,如下所示:

// Called on 'Return' pressed. Return false to ignore.


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

您可以使用以下函数使应用程序解除键盘

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

下面是一个完整的例子来更好地说明这一点:

//
//  ViewController.swift
//
//


import UIKit


class ViewController: UIViewController, UITextFieldDelegate {


@IBOutlet var myTextField : UITextField


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.


self.myTextField.delegate = self
}


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

代码来源:http://www.snip2code.com/Snippet/85930/swift-delegate-sample

@RSC

对我来说,Xcode Version 6.2 (6C86e)的关键添加是在override func viewDidLoad()

 self.input.delegate = self;

我试着用返回键让它工作了几个小时,直到我找到了你的帖子,RSC。谢谢你!

此外,如果你想隐藏键盘,如果你触摸屏幕上的其他地方:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.view.endEditing(true);
}

我建议从RSC初始化类:

import Foundation
import UIKit


// Don't forget the delegate!
class ViewController: UIViewController, UITextFieldDelegate {


required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}


@IBOutlet var myTextField : UITextField?


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.


self.myTextField.delegate = self;
}


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


func textFieldShouldReturn(textField: UITextField!) -> Bool {
self.view.endEditing(true);
return false;
}

为了获得自动键盘撤销,我将以下代码放在自定义文本字段类的一个方法中:

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)

将outlet的名称替换为textField

  • 在类声明中添加UITextFieldDelegate:

    class ViewController: UIViewController, UITextFieldDelegate
    
  • Connect the textfield or write it programmatically

    @IBOutlet weak var userText: UITextField!
    
  • set your view controller as the text fields delegate in view did load:

    override func viewDidLoad() {
    super.viewDidLoad()
    self.userText.delegate = self
    }
    
  • Add the following function

    func textFieldShouldReturn(userText: UITextField!) -> Bool {
    userText.resignFirstResponder()
    return true;
    }
    

    所有这些,你的键盘将开始解散通过触摸文本框外,以及按回车键

另一种主要使用故事板并轻松允许你拥有多个文本字段的方法是:

@IBAction func resignKeyboard(sender: AnyObject) {
sender.resignFirstResponder()
}

将该视图控制器的所有文本字段连接到每个字段的Did End On Exit事件上的操作。

当用户点击文本键盘上的Done按钮时,将生成Did End on Exit事件;那时,我们需要告诉文本字段放弃控制,这样键盘就会消失。为了做到这一点,我们需要向控制器类添加一个动作方法。 选择ViewController.swift添加以下动作方法:

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

选择主要。项目导航器中的故事板,并调出连接检查器。从Did End On Exit旁边的圆圈拖动到故事板中的黄色视图控制器图标,然后松开。将出现一个小弹出菜单,其中包含我们刚刚添加的单个操作的名称。单击textFieldDoneEditing动作来选择它,就是这样。

确保你的textField委托被设置为视图控制器,从你正在写你的textField相关的代码。

self.textField.delegate = self

斯威夫特3

将下面的代码添加到你的VC中

//hide keyboard when user tapps on return key on the keyboard
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.view.endEditing(true);
return false;
}

对我有用

简单快捷3解决方案: 将这个函数添加到以文本字段为特征的视图控制器:

@IBAction func textField(_ sender: AnyObject) {
self.view.endEditing(true);
}

然后打开你的助理编辑器,确保你的主。Storyboard位于视图的一侧,所需的视图controller.swift文件位于另一侧。单击一个文本字段,然后从右边的实用工具面板“显示连接检查器”选项卡中选择。从“Did End on Exit”控件拖动到swift文件中的上述函数。重复该场景中的任何其他文本字段,并链接到相同的函数。

下面是Swift 3.0版本对peacetype注释的更新:

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)

你可以把它放在任何地方,但不能放在UIButton中

 func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
return (false)
}

然后你可以把这段代码放在一个按钮中(也是一个例子):

self.view.endEditing(true)

这对我很有效

斯威夫特

使用UITextFieldDelegate中的可选函数。

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

false表示字段可以被要求辞职。强迫辞职。

在你正在使用的视图控制器中:

//suppose you are using the textfield label as this


@IBOutlet weak var emailLabel: UITextField!
@IBOutlet weak var passwordLabel: UITextField!


//then your viewdidload should have the code like this
override func viewDidLoad() {
super.viewDidLoad()


self.emailLabel.delegate = self
self.passwordLabel.delegate = self


}


//then you should implement the func named textFieldShouldReturn
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}


// -- then, further if you want to close the keyboard when pressed somewhere else on the screen you can implement the following method too:


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

Swift 4.2 -不需要委托

你可以从UITextField为“__abc0”创建一个动作出口。并在传入的sender参数上辞职第一个responder:

Create Action Outlet

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

超级简单。

(感谢Scott Smith的60秒视频告诉我这个:https://youtu.be/v6GrnVQy7iA)

override func viewDidLoad() {
super.viewDidLoad()


let tap = UITapGestureRecognizer(target: self, action: #selector(handleScreenTap(sender:)))
self.view.addGestureRecognizer(tap)}

然后用这个函数

func handleScreenTap(sender: UITapGestureRecognizer) {
self.view.endEditing(true)
}
我讨厌给每个UIViewController添加相同的函数。 通过扩展UIViewController来支持UITextFieldDelegate,你可以提供一个默认行为“返回按下”。< / p >
extension UIViewController: UITextFieldDelegate{
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true;
}
}

当你创建新的UIViewController和UITextField时,你所要做的就是在你的UIViewController中写一行代码。

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

你甚至可以通过在Main.storyboard中钩子委托来省略这一行代码。(使用“ctrl”从UITextField拖动到UIViewController)

你应该连接UITextfied和一个视图控制器的委托来调用这个函数

所有在一个隐藏键盘和移动键盘打开视图:Swift 5

override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(taped))
view.addGestureRecognizer(tap)
NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}




override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func taped(){
    

self.view.endEditing(true)
    

}


@objc func KeyboardWillShow(sender: NSNotification){
    

let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size)!
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
    

    

}


@objc func KeyboardWillHide(sender : NSNotification){
    

let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size)!
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
    

}




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