Swift - 如何在点击文本框外部后关闭数字键盘

Swift - How to dismiss number keyboard after tapping outside of the textfield

在键盘外部点击时,您将如何从 UITextField 中关闭键盘。我试过 resignFirstResponder() 并且它只在输入一个数字后退出。我也试过textField.inputView = UIView.frame(frame: CGRectZero)。我已经看到很多关于我所问问题的 Obj-C 版本,但我需要 Swift 等价物,因为我在 Objective-C

方面没有编程经验

感谢您的耐心等待。

向视图添加点击手势识别器并调用 resignFirstResponder() 或 self.view.endEditing(true) 的最佳方式。我更喜欢 endEditing() 因为 resignFirstResponder 必须分别为每个文本字段完成,这与为视图本身完成的 endEditing 不同。

在viewDidLoad中,编写如下代码:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: "didTapView")
self.view.addGestureRecognizer(tapRecognizer)

现在编写 didTapView 方法来关闭键盘:

func didTapView(){
  self.view.endEditing(true)
}

现在,当您在控制器主视图的键盘外部点击时,它会调用 didTapView 方法并关闭键盘。

Swift 3.x

viewDidLoad 中的代码应该是:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: #selector(ViewController.didTapView))
self.view.addGestureRecognizer(tapRecognizer)

其中 ViewController 应该是您的视图控制器的名称。

谢谢

如果你不想定义一个额外的方法,有一个稍微简单的方法也可以

let tapRecognizer = UITapGestureRecognizer(target: self, action: "endEditing:")
view.addGestureRecognizer(tapRecognizer)

您也可以使用此方法在按下 'Return'

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

确保设置你的委托

Swift 3 人测试并工作

 // dismiss keyboard on touch outside textfield
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for txt in self.view.subviews {
            if txt.isKind(of: UITextField.self) && txt.isFirstResponder {
                txt.resignFirstResponder()
            }
        }
    }   

尽情享受

Swift 2.3 测试和工作

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for txt in self.view.subviews {
            if txt.isKindOfClass(UITextField.self) && txt.isFirstResponder() {
                txt.resignFirstResponder()
            }
        }
    }

尽情享受

我在网站上找到了这段代码,它对我来说非常有用!

//FUNCTION TO DISMISS THE KEYBOARD
 func initializeHideKeyboard(){
 //Declare a Tap Gesture Recognizer which will trigger our dismissMyKeyboard() function
 let tap: UITapGestureRecognizer = UITapGestureRecognizer(
 target: self,
 action: #selector(dismissMyKeyboard))
 //Add this tap gesture recognizer to the parent view
 view.addGestureRecognizer(tap)
 }

 @objc func dismissMyKeyboard(){
 //endEditing causes the view (or one of its embedded text fields) to resign the first responder status.
 //In short- Dismiss the active keyboard.
 view.endEditing(true)
 }

然后只需在按钮操作或类似操作中调用此函数即可:

dismissMyKeyboard()