Я форматирую UITextField
так, чтобы при вводе он разделялся запятыми (десятичный стиль).
То есть 12345678
становится 12,345,678
Теперь, когда я редактирую UITextField
, скажем, я хочу удалить 5
, тогда я нажимаю после 5
и удаляю егоно курсор сразу перемещается в конец текста, то есть после 8
.
Вот мой код, который я использовал для форматирования десятичной дроби при наборе:
func checkTextField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if ((string == "0" || string == "") && (textField.text! as NSString).range(of: ".").location < range.location) {
return true
}
let allowedCharacterSet = NSCharacterSet(charactersIn: "0123456789.").inverted
let filtered = string.components(separatedBy: allowedCharacterSet)
let component = filtered.joined(separator: "")
let isNumeric = string == component
if isNumeric {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
let numberWithOutCommas = newString.replacingOccurrences(of: ",", with: "")
let number = formatter.number(from: numberWithOutCommas)
if number != nil {
var formattedString = formatter.string(from: number!)
if string == "." && range.location == textField.text?.count {
formattedString = formattedString?.appending(".")
}
textField.text = formattedString
} else {
textField.text = nil
}
}
return false
}
Он называетсявот так:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let textFieldText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
let checkForCurrency = checkTextField(textField, shouldChangeCharactersIn: range, replacementString: string)
return checkForCurrency
}
Я пробовал следующее, но напрасно:
Решение 1
Решение 2
В чем может быть причина смещения курсора?Это должно быть что-то вроде этой ссылки. Любая помощь приветствуется!