如何在触摸UITextField之外的任何地方(swift中)关闭键盘?

我正在研究一个有UIViewController的项目,在视图控制器上有一个UIScrollView和一个UITextField。 喜欢这个: 我想在键入文本框中的一些文本后点击键盘并隐藏它,然后点击文本框外的任何位置。 我试过下面的代码:

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

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

当我在滚动视图外点按时,它适用于我,但是当我点击滚动视图时,什么也没有发生,键盘也不会隐藏。

在textfield外部的任何地方轻击时有什么方法可以解除键盘的使用吗? 谢谢


编辑Swift 4

编辑:添加@objc 。 虽然这不是性能的最佳选择,但这里的一个例子不应该导致太多的问题,除非有更好的解决方案。

这应该有助于你有多个UITextViewUITextField

创建视图控制器的扩展。 这对我来说运行得更顺畅,而且比尝试使用.resignFirstResponder()

extension UIViewController
{
    func hideKeyboard()
    {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(
            target: self,
            action: #selector(UIViewController.dismissKeyboard))

        view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard()
    {
        view.endEditing(true)
    }
}

在viewDidLoad中调用self.hideKeyboard()


试试这个,它已经过测试和工作:

对于Swift 3.0 / 4.0

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

对于老斯威夫特

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

在这种情况下,UITapGesture就是其中一种选择。 我试图创建示例代码以防万一。 喜欢这个,

class ViewController: UIViewController {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var scrollView: UIScrollView!

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

        let tapGesture = UITapGestureRecognizer(target: self, action: "tap:")
        view.addGestureRecognizer(tapGesture)
    }

    func tap(gesture: UITapGestureRecognizer) {
        textField.resignFirstResponder()
    }
}
链接地址: http://www.djcxy.com/p/73507.html

上一篇: How to dismiss keyboard when touching anywhere outside UITextField (in swift)?

下一篇: iOS keyboard flickers when switching view controllers