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

5 xcode ios swift

当点击键盘外部时,如何从UITextField中解除键盘.我试过了resignFirstResponder(),它只在输入一个数字后退出.我也试过了textField.inputView = UIView.frame(frame: CGRectZero).我见过很多Obj-C的问题,但是我需要Swift等价物,因为我没有Objective-C的编程经验

感谢您的时间和耐心.

mom*_*per 16

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

在viewDidLoad中,编写以下代码:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: "didTapView")
self.view.addGestureRecognizer(tapRecognizer)
Run Code Online (Sandbox Code Playgroud)

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

func didTapView(){
  self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

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

Swift 3.x

viewDidLoad中的代码应该是:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: #selector(ViewController.didTapView))
self.view.addGestureRecognizer(tapRecognizer)
Run Code Online (Sandbox Code Playgroud)

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

谢谢


sta*_*tan 5

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

请享用

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

请享用


ale*_*lex 2

您还可以使用此方法在按“Return”时关闭键盘

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

确保设置您的代表