按返回键如何在swift中隐藏键盘?

Ash*_*kar 195 uitextfield ios swift

UITextfied在点击文本键盘时使用,但是当我按下return键时,键盘没有消失.我使用了以下代码:

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

resignfirstresponder方法没有进入功能.

rsc*_*rsc 370

您可以使用以下功能使应用程序关闭键盘

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

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

//
//  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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我错过了"self.myTextField.delegate = self;" 谢谢! (22认同)
  • 我错过了`UITextFieldDelegate`! (4认同)

Mic*_*lum 102

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

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

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    textField.resignFirstResponder()
    return true
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢...在我的情况下"resignFirstResponder()"方法没有自动获得,我认为它不支持,但在手动编写其工作正常..谢谢我正在寻找. (2认同)
  • 您的 viewController 不是必须符合“UITextFieldDelegate”吗? (2认同)

Sat*_*ync 44

  • “有了这一切,您的键盘将通过触摸文本字段外开始关闭”- 不正确。textFieldShouldReturn 仅在按下返回按钮时调用。 (2认同)

Mar*_*ens 23

Swift 4.2 - 无需代表

您可以从UITextField为" 触发的主要操作 " 创建一个操作插座,并在传入的sender参数上重新签名第一个响应者:

创建动作插座

@IBAction func done(_ sender: UITextField) {
    sender.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)

超级简单.

(感谢斯科特史密斯的60秒视频,让我知道这件事:https://youtu.be/v6GrnVQy7iA)


小智 23

我讨厌向每个 UIViewController 添加相同的功能。通过扩展 UIViewController 以支持 UITextFieldDelegate,您可以提供“按下返回”的默认行为。

extension UIViewController: UITextFieldDelegate{
    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

override func viewDidLoad() {
    super.viewDidLoad()
    textField.delegate = self
}
Run Code Online (Sandbox Code Playgroud)

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


ela*_*ris 22

Simple Swift 3解决方案:将此功能添加到具有文本字段的视图控制器中:

@IBAction func textField(_ sender: AnyObject) {
    self.view.endEditing(true);
}
Run Code Online (Sandbox Code Playgroud)

然后打开助理编辑器,确保您的Main.storyboard位于视图的一侧,并且所需的视图controller.swift文件位于另一侧.单击文本字段,然后从右侧实用程序面板"显示连接检查器"选项卡中进行选择.控制从"退出时结束"拖动到swift文件中的上述功能.对该场景中的任何其他文本字段重复并链接到同一个功能.


小智 13

@RSC

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

 self.input.delegate = self;
Run Code Online (Sandbox Code Playgroud)

尝试使用返回键几个小时,直到我找到你的帖子,RSC.谢谢!

此外,如果您想触摸屏幕上的任何其他位置,请隐藏键盘:

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


pea*_*ype 12

要获得自动键盘解雇,我将此代码放在我的自定义文本字段类的一个方法中:

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)
Run Code Online (Sandbox Code Playgroud)

替换你的出口名称textField.


小智 10

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

@IBAction func resignKeyboard(sender: AnyObject) {
    sender.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)

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


小智 8

当用户点击文本键盘上的"完成"按钮时,将生成"结束时退出"事件; 那时,我们需要告诉文本字段放弃控制,这样键盘就会消失.为此,我们需要向控制器类添加一个动作方法.选择ViewController.swift添加以下操作方法:

@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}
Run Code Online (Sandbox Code Playgroud)

在Project Navigator中选择Main.storyboard,然后打开连接检查器.从"结束时退出"旁边的圆圈拖动到故事板中的黄色"视图控制器"图标,然后松开.将出现一个小弹出菜单,其中包含我们刚刚添加的单个操作的名称.单击textFieldDoneEditing操作以选择它,就是这样.


LAO*_*RTS 7

我想从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;
}
Run Code Online (Sandbox Code Playgroud)

}


小智 7

这是和平型评论的Swift 3.0更新:

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
Run Code Online (Sandbox Code Playgroud)


dim*_*iax 6

迅速

\n

使用 中的可选功能UITextFieldDelegate

\n
func textFieldShouldReturn(_ textField: UITextField) -> Bool {\n    textField.endEditing(false)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

false意味着该字段可以被要求辞职。true\xe2\x80\x93 强制辞职。

\n


Gil*_*man 5

斯威夫特3

将以下代码添加到VC中

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

适合我


小智 5

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(handleScreenTap(sender:)))
    self.view.addGestureRecognizer(tap)}
Run Code Online (Sandbox Code Playgroud)

然后你使用这个功能

func handleScreenTap(sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)