Я пытаюсь создать UITextField
, где вход постоянно отображается в формате валюты, даже если пользователь редактирует. Он должен работать как:Отображение UITextField в формате без децимал
$0
типа пользователя 1
$1
типа пользователя 2
$12
типа пользователя 0
$120
типа пользователя 0
$1,200
тип пользователя 0
$12,000
мне удалось получить окончательное форматирование с помощью NumberFormatter
как
textField.text = (numberFormatter.string(from: NSNumber(value: Int(textField.text!)!)))?.components(separatedBy: ".")[0]
Но как только я форматировать текст в текстовом поле, последующий ввод вызовет ошибку, как:
$1,000
пользовательский тип 0
$1,0000 //number formatter cannot recognise this as a format of currency
Есть в любом случае я могу манипулировать вход, чтобы позволить пользователю нужно только ввести в цифрах, но значение отображается в правильной валюте форматирования с символом плюс запятыми - например, $ 1200000. Независимо от количества цифр, но логически до 10 достаточно.
Мой текущий TextField shouldChangeCharactersInRange
как это:
textField.text = numberFormatter.number(from: textField.text!)?.description
if(range.length == 1){ //Backspace
if(textField.text?.characters.count == 1){
textField.text = "$0"
return false
}
return true
}
if(string.trimmingCharacters(in: CharacterSet.decimalDigits.inverted) == ""){
textField.text = (numberFormatter.string(from: NSNumber(value: Int(textField.text!)!)))?.components(separatedBy: ".")[0]
return false
}
if(string == ".") {
textField.text = (numberFormatter.string(from: NSNumber(value: Int(textField.text!)!)))?.components(separatedBy: ".")[0]
return false
}
textField.text = (numberFormatter.string(from: NSNumber(value: Int(textField.text!.append(string)!)!)))?.components(separatedBy: ".")[0]
return false
Также был бы благодарен, если кто-нибудь может дать советы, чтобы помочь мне уменьшить количество скобок и сделать код выглядеть чище, без необходимости добавлять слишком много строк. –