当前位置: > > > Swift - 点击输入框外部屏幕关闭虚拟键盘

Swift - 点击输入框外部屏幕关闭虚拟键盘

(本文代码已升级至Swift3)

我们如果把文本框的 Return Key 设置成 Done,然后在 storyboard 中将文本框的 Did End On Exit 事件在代码里进行关联。同时关联代码里调用文本框的 resignFirstResponder() 方法。就可以实现用户点击键盘 return key 时就收起键盘。
 
如果要实现当用户点击文本框之外的舞台屏幕时也能关闭虚拟键盘。这时就要让屏幕的背景响应Touch Down事件。

(1)由于背景是 UIView 控件,不能直接拖拽关联 Touch 事件。首先要让背景变成 UIControl 控件。
点击右上角的 Show the identity inspector 图标,设置 Custom Class ClassUIControl 就可以事件关联了。

(2)拖动背景到代码中,关联 Touch Up Inside 事件

(3)在背景点击事件中,关闭键盘
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tf: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func viewClick(_ sender: Any) {
        tf.resignFirstResponder()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

(4)我们还可以通过调用当前 viewendEditing 方法来收起键盘。这样如果页面上如果有多个 textfield,不需要再去判断当前是哪个获取到焦点。
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tf: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func viewClick(_ sender: Any) {
        self.view.endEditing(true)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
评论1
  • 1楼
    2017-11-04 10:13
    zfx

    多个UITextField!怎么设置去掉键盘

    站长回复

    文章(4)小节说的就是这个情况。