美文网首页
视图 view 上有多个响应控件时,点击屏幕收起键盘的解决办法。

视图 view 上有多个响应控件时,点击屏幕收起键盘的解决办法。

作者: 一一雪液一一 | 来源:发表于2018-06-12 14:27 被阅读12次

    问题场景:

    项目中一个 view 上有若干个可以点击的控件。同时有一个 textFiled(以下简称 TF),点击这个 TF 会弹出一个键盘用以输入,弹出键盘之后,如果想要点击屏幕任意的地方收起这个键盘。
    常用思路是:

        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            self.inputMoneyTF.resignFirstResponder()
        }
    

    但是这样 点击屏幕上其他可点击控件的地方时,响应的是那个可点击的控件。也就是说只能点击 view 上没有控件的地方才能收起键盘。

    解决:

    - - - - - > 当 textFiled 的代理是 viewController 时:

     //通过添加一层视图,让这层 view 在响应者链条的顶端,这样在 touch 方法里响应的就是这层视图。
        func textFieldDidBeginEditing(_ textField: UITextField) {
            let tempView = UIView.init(frame: .init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
            self.tfTempView = tempView
            self.view.addSubview(tempView)
        }
        //移除视图
        func textFieldDidEndEditing(_ textField: UITextField) {
            self.tfTempView?.removeFromSuperview()
        }
        //点击键盘上的 return 键收起键盘
        func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            return textField.resignFirstResponder()
        }
    
    

    - - - - - > 当 textFiled 的代理是 view 时:

        func textFieldDidBeginEditing(_ textField: UITextField) {
            let tempView = UIView.init(frame: .init(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))
            self.tfTempView = tempView
            let tapGes = UITapGestureRecognizer.init(target: self, action: #selector(tfRegister))
            self.tfTempView?.addGestureRecognizer(tapGes)
            self.viewController().view.addSubview(tempView)//viewController()为获取当前 view 对应的 VC
        }
        @objc func tfRegister() {
            self.varifiTF.resignFirstResponder()
            self.markTF.resignFirstResponder()
            self.amountInputTF.resignFirstResponder()
            self.passwordTF.resignFirstResponder()
            self.tfTempView?.removeFromSuperview()
        }
    

    以上。

    相关文章

      网友评论

          本文标题:视图 view 上有多个响应控件时,点击屏幕收起键盘的解决办法。

          本文链接:https://www.haomeiwen.com/subject/uenleftx.html