UITextField 起始光标位置错误

Dre*_*ree 5 uitextfield ios swift

我有一个带有一些预编译文本的文本字段。文本字段内的文本在视觉上是右对齐的。当我点击文本字段时,我希望光标位于文本的末尾,以便我可以准备编辑文本。默认情况下,光标位于文本的开头,如果我点击该单词,则位于单词的末尾。

我试图selectedTextRange按照其他答案的建议设置该属性,但我无法实现结果。我注意到becomeFirstResponder()给出正确行为的方式。

func textFieldDidBeginEditing(_ textField: UITextField) {
    textField.selectedTextRange =
        textField.textRange(from: textField.endOfDocument, to: textField.endOfDocument)
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Leo*_*bus 5

您需要始终从主线程更新您的 UI:

DispatchQueue.main.async {
    textField.selectedTextRange = textField.textRange(from: textField.endOfDocument, to: textField.endOfDocument)
}
Run Code Online (Sandbox Code Playgroud)

  • 澄清一下:IIRC,textFieldDidBeginEditing *确实*在主线程上执行,但有必要允许该事件在设置文本范围之前完成(从当前函数返回)。这是通过“排队”对主线程的更改来完成的。 (3认同)