编辑 UITextView 并在表格视图控制器中触摸键盘以外的任何位置时无法关闭键盘

Posted

技术标签:

【中文标题】编辑 UITextView 并在表格视图控制器中触摸键盘以外的任何位置时无法关闭键盘【英文标题】:Can't dismiss keyboard when editing UITextView and touching anywhere outside of keyboard in table view controller 【发布时间】:2019-12-21 02:59:52 【问题描述】:

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

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 新手,希望能提供任何帮助!

【问题讨论】:

您希望用户触摸什么来关闭键盘?你实际上是在测试什么? 这能回答你的问题吗? ios - Dismiss keyboard when touching outside of UITextField 上述代码和 touchesBegan 方法在都是 UITextField 时有效,但不适用于 UITextViews。当用户触摸键盘外部时,应关闭键盘(view.endEditing)。 【参考方案1】:

在您的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")

【讨论】:

我试过 self.textview.endEditing(true) 还是不行。我不知道这是否与 UITextView 或 touchesBegan 方法有关。 (forums.developer.apple.com/thread/91263) 表视图控制器内部的文本视图有问题吗? 我已更改代码,请尝试并返回!! @Jon,随时!并感谢您的批准可能会回答:)【参考方案2】:

您需要在单元格内添加点击手势识别器。将所有文本输入放在 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)

【讨论】:

以上是关于编辑 UITextView 并在表格视图控制器中触摸键盘以外的任何位置时无法关闭键盘的主要内容,如果未能解决你的问题,请参考以下文章

将图像添加到 UITextView

Swift 4:@IBOutlet UITextView 崩溃

无法在自定义 TableViewCell 中编辑 UITextView

UITextView 光标在编辑时完全消失了

Swift:检测用户编辑的热点已在 UITextView 中停止

调整表格视图单元格以显示 UITextView 和 UIWebView