所以这是我的问题。 我正在使用UITextField作为支付卡号,并且正在 .editingChanged 上格式化该号码,以使其始终具有4位数字的格式,并且两者之间具有空格。 (示例:5213 0000 0000 1234 )。
问题是,例如,当我从短信中复制(未格式化的)数字时,光标将出现在第16个字符之后(示例:5213 0000 0000 1 | 234 )。
我需要将光标放在末尾,但到目前为止,对我来说没有任何作用。 我试过在格式化后在 .editingChanged 上触发的同一功能中设置位置(我将answer用作教程),但没有任何反应。
我还尝试使自定义UITextField覆盖 closestPosition 函数,以使光标始终位于末尾,用户不会移动它,但即使该光标出现在第16位复制粘贴后的位置。
有人知道如何处理吗? 感谢您的所有帮助。 <3
(注意:我们仅支持16位数字的卡号)
答案 0 :(得分:1)
您可以使用文本字段的selectedTextRange
属性(它采用的UITextInput
协议的一部分)来更新光标位置。
在修改文本字段的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
}
注意:如果您在紧接之前修改了文本字段的text
字符串,则通常必须安排在下一个运行循环中进行此操作(因此使用{{1 }} main
)。不知道为什么会这样,但是可能是一个DispatchQueue
错误。
可以在这里找到UIKit
文档(如果您想对文本字段执行某些操作而不是访问其文本,总是一个不错的开始):