Swift – 如何在文本字段之外轻敲数字键盘

当你敲击键盘外部的时候,你会如何解除键盘的UITextField? 我已经尝试resignFirstResponder() ,它只能input一个数字后退出。 我也试过textField.inputView = UIView.frame(frame: CGRectZero) 。 我见过许多Obj-C的verisons我问,但我需要Swift的等价物,因为我没有在Objective-C编程经验

感谢您的时间和耐心。

您也可以使用这种方法来解除键盘时按'返回'

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

确保设置你的委托

向视图添加轻击手势识别器并调用resignFirstResponder()或self.view.endEditing(true)的最佳方法。 我更喜欢endEditing(),因为resignFirstResponder必须为每个文本字段单独完成,而不像endEditing完成视图本身。

在viewDidLoad中,写下面的代码:

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

现在编写didTapView方法来closures键盘:

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

现在,当您在控制器的主视图上敲击键盘外部时,它将调用didTapView方法并closures键盘。

Swift 3.x

viewDidLoad中的代码应该是:

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

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

谢谢

Swift 3testing和工作

  // 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.3testing和工作

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

请享用

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

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