Ios 复制粘贴后,如何将光标放在格式化数字的末尾?

Ios 复制粘贴后,如何将光标放在格式化数字的末尾?,ios,swift,Ios,Swift,这就是我的问题。 我使用UITextField作为支付卡号,并在上格式化此号码。编辑更改了以使其始终具有4位数字的格式,并在它们之间留有空格。(示例:5213 0000 0000 1234) 问题是,例如,当我从sms复制粘贴(未格式化)号码时,光标将出现在第16个字符之后(例如:5213 0000 0000 1 | 234) 我需要光标位于末尾,但到目前为止,没有任何东西对我有效。 我试着在.editingChanged上启动的同一个函数中设置格式后的位置(我将此用作教程),但没有真正发生任何

这就是我的问题。 我使用UITextField作为支付卡号,并在上格式化此号码。编辑更改了以使其始终具有4位数字的格式,并在它们之间留有空格。(示例:5213 0000 0000 1234)

问题是,例如,当我从sms复制粘贴(未格式化)号码时,光标将出现在第16个字符之后(例如:5213 0000 0000 1 | 234)

我需要光标位于末尾,但到目前为止,没有任何东西对我有效。 我试着在.editingChanged上启动的同一个函数中设置格式后的位置(我将此用作教程),但没有真正发生任何事情

我还尝试创建自定义UITextField,在这里我覆盖了closestPosition函数,这样光标将始终位于末尾,用户无法移动它,但即使在复制粘贴后光标出现在第16个位置

有人知道怎么处理这件事吗?
谢谢你的帮助 您可以使用textfield的
selectedtextange
属性更新光标位置(这是它采用的
uiteOutput
协议的一部分)

修改文本字段的
text
属性后更新该属性:

// Add spaces as required here then:

DispatchQueue.main.async {
    let end = self.textField.endOfDocument
    let range = self.textField.textRange(from: end, to: end)
    self.textField.selectedTextRange = range
}
注意:如果您在紧接之前修改了textfield的
text
字符串(因此使用了
main
调度队列),则通常必须在下一次运行循环中安排该操作。不知道为什么会这样,但这可能是一个
UIKit
bug

可以在此处找到
UITEPUT
文档(如果您希望在访问文本之外对文本字段执行操作,那么这始终是一个开始查找的好地方):


尝试使用输入掩码
main
DispatchQueue
为我做这件事!非常感谢你!