解除键盘后,带有所选文本的UITextView不响应触摸

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解除键盘后,带有所选文本的UITextView不响应触摸相关的知识,希望对你有一定的参考价值。

我的视图控制器中有一个UITextView和一些代码,当按下键盘上的Done按钮时,或者在文本视图外部点击时,它会解除键盘。因此,用户可以在文本视图中输入一些文本,关闭键盘,然后再次点击文本视图以重新召唤键盘。

当我选择一些文本然后关闭键盘时,所选文本上的突出显示将按预期消失。但由于某种原因,如果我点击之前突出显示的文本,键盘不会出现,并且光标不会插入到文本视图中以开始编辑,这是预期的行为。

什么可能阻止文本视图在文本突出显示后识别单击,然后键盘被解除?请注意,在这种情况下,文本视图将识别双击或长按手势,而不是单击。

答案

我弄清楚问题是什么。但我找不到任何其他问题来解决这个具体情况,所以我在这里回答我自己的问题,以防它可能会帮助遇到同样问题的其他人。

问题是,当您在选择文本时关闭键盘时,虽然所选文本上的突出显示似乎消失,但系统似乎认为文本仍处于选中状态,似乎正在等待其他一些输入。因此它无法识别通常的单击手势来开始编辑。

我所做的是在我的视图控制器中我有解除键盘的代码,我在解除键盘之前放了textView.selectedTextRange = nil。这可确保文本视图中没有选定的文本。之后,可以安全地关闭键盘。

以下是我用来解除键盘的两种方法,添加了这一行。

// Dismiss keyboard when touching outside the text view.
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    super.touchesBegan(touches, withEvent: event)
    textView.selectedTextRange = nil // ensures no text is selected, avoiding an issue which prevented single-tapping on the text after keyboard dismisses
    view.endEditing(true) // dismisses keyboard
}

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    // Dismiss keyboard when return key is pressed.
    if text == "
" {
        textView.selectedTextRange = nil // ensures no text is selected, avoiding an issue which prevented single-tapping on the text after keyboard dismisses
        textView.resignFirstResponder() // dismisses keyboard
        return false
    }
}

以上是关于解除键盘后,带有所选文本的UITextView不响应触摸的主要内容,如果未能解决你的问题,请参考以下文章

当弹出框被解除时,保持 UITextView 中的文本突出显示

当键盘可见时如何使 UITextView 一直滚动到底部

Swift 3在UITextView中更改所选文本的颜色

使用带有 UITextView 的特定键盘的错误

ios uitextview 怎么设置编辑时弹出键盘

带有 UITextView 的 iOS 7 UITableViewCell 隐藏在键盘后面