在 table 视图控制器中编辑 UITextView 和触摸键盘以外的任何地方时无法关闭键盘

Can't dismiss keyboard when editing UITextView and touching anywhere outside of keyboard in table view controller

我在 table 视图控制器的一个单元格中有几个 textView,我试图在您触摸键盘以外的任何地方时关闭键盘。我已经尝试了 touches started 方法,但它没有用。文本视图不是透明的,并且启用了用户交互。

class RegisterTableViewController: UITableViewController {
    override func viewDidLoad() {
      // set all text views delegate to self
    }

    // dismiss keyboard on touch
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touch")
        super.touchesBegan(touches, with: event)
        view.endEditing(true)
    }
}

extension RegisterTableViewController: UITextViewDelegate {
    func textViewDidBeginEditing(_ textView: UITextView) {
        textView.text = ""
    }
}

我是 swift 的新手,非常感谢任何帮助!

  • 在您的 UITableViewCell 文件中添加 touchesBegan 代码,如果您在单元格 TextField 外部但在单元格

    内部触摸,这将起作用
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
          self.Your_TextField.endEditing(true)
    }
    
  • 但它在 cell 之外不起作用(在另一个 ViewControllerUIVIew 中),所以添加 UITapGesture 来实现

    override func viewDidLoad() {
    super.viewDidLoad()
         let tapgest = UITapGestureRecognizer(target: self, action: #selector(taptoend))
    
         self.Your_Table_View.addGestureRecognizer(tapgest)
    }
    
    @objc func taptoend()
    {
         self.Your_Table_View.endEditing(true)
         print("Key-Board will be dismissed here")
    }
    

您需要在您的单元格中添加点击手势识别器。将所有文本输入放在 UIView 中。在单元格内制作 UIView 的出口。然后将此代码添加到您的单元格中。

@IBOutlet weak var myView: UIView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
    let tap = UITapGestureRecognizer(target: self, action:    #selector(self.dismissKeyboard))
    self.myView.addGestureRecognizer(tap)
}

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