关闭键盘后,带有选定文本的 UITextView 不响应触摸
UITextView with selected text is not responding to touch after dismissing keyboard
我的视图控制器中有一个 UITextView
和一些代码,当按下键盘上的“完成”按钮或在文本视图外部点击时,这些代码会关闭键盘。因此用户可以在文本视图中输入一些文本,关闭键盘,然后再次点击文本视图以重新调用键盘。
当我 select 一些文本然后关闭键盘时,selected 文本上的突出显示会按预期消失。但出于某种原因,如果我点击之前突出显示的文本,键盘不会出现,光标不会插入文本视图以开始编辑,这是预期的行为。
在突出显示文本然后关闭键盘后,什么会阻止文本视图识别单击?请注意,在这种情况下,文本视图将识别双击或长按手势,而不是单击。
我明白问题出在哪里了。但是我找不到任何其他问题来解决这种特定情况,所以我在这里回答我自己的问题,以防它可以帮助 运行 遇到同样问题的其他人。
问题是,当您在选择文本时关闭键盘时,虽然所选文本上的突出显示似乎消失了,但系统似乎认为该文本仍处于选中状态并且似乎在等待一些其他输入。因此它无法识别通常的单击手势来开始编辑。
我所做的是在我的视图控制器中我有关闭键盘的代码,我在关闭键盘之前输入 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 == "\n" {
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
和一些代码,当按下键盘上的“完成”按钮或在文本视图外部点击时,这些代码会关闭键盘。因此用户可以在文本视图中输入一些文本,关闭键盘,然后再次点击文本视图以重新调用键盘。
当我 select 一些文本然后关闭键盘时,selected 文本上的突出显示会按预期消失。但出于某种原因,如果我点击之前突出显示的文本,键盘不会出现,光标不会插入文本视图以开始编辑,这是预期的行为。
在突出显示文本然后关闭键盘后,什么会阻止文本视图识别单击?请注意,在这种情况下,文本视图将识别双击或长按手势,而不是单击。
我明白问题出在哪里了。但是我找不到任何其他问题来解决这种特定情况,所以我在这里回答我自己的问题,以防它可以帮助 运行 遇到同样问题的其他人。
问题是,当您在选择文本时关闭键盘时,虽然所选文本上的突出显示似乎消失了,但系统似乎认为该文本仍处于选中状态并且似乎在等待一些其他输入。因此它无法识别通常的单击手势来开始编辑。
我所做的是在我的视图控制器中我有关闭键盘的代码,我在关闭键盘之前输入 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 == "\n" {
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
}
}