所以,我希望在更新文本框值之后更改光标位置(输入掩码类似于“+7 000 000 00 00”)。
我有一个文本框:
TextField("+7 000 000 00 00", text: $loginChecker.login)
.textContentType(.telephoneNumber)
.keyboardType(.numberPad)
.disableAutocorrection(true)
.textFieldStyle(BasicTextField())
检查的类:
class LoginChecker: ObservableObject {
var full = false
var login = "" {
willSet {
if newValue.count > 16 {
self.full = true
} else {
self.full = false
}
}
didSet {
if self.full {
self.login = oldValue
} else {
self.login = self.phoneFormatter()
}
self.objectWillChange.send()
}
}
func phoneFormatter () -> String {
let numbers = onlyNumbers(self.login)
var newValue = numbers.first == "7" ? String(numbers.dropFirst()) : numbers
if numbers.count > 0 {
newValue.insert("+", at: newValue.startIndex)
newValue.insert("7", at: newValue.index(newValue.startIndex, offsetBy: 1))
newValue.insert(" ", at: newValue.index(newValue.startIndex, offsetBy: 2))
if numbers.count > 4 {
newValue.insert(" ", at: newValue.index(newValue.startIndex, offsetBy: 6))
if numbers.count > 7 {
newValue.insert(" ", at: newValue.index(newValue.startIndex, offsetBy: 10))
if numbers.count > 9 {
newValue.insert(" ", at: newValue.index(newValue.startIndex, offsetBy: 13))
}
}
}
}
return newValue
}
}
当我更新TextField的值时,光标位置不会改变。
截图:
![[](https://istack.dev59.com/JnFiDl.webp)