Я создал пользовательский компонент UITextField для ввода фиксированного размера. Ширина TextField, размер шрифта, кернинг и количество символов фиксированы. Я могу запретить пользователю вводить более 8 символов (см. Ниже метод shouldChangeCharactersIn), однако после 8-го символа курсор автоматически перемещается в следующую позицию, что создает следующую проблему.
Я хочу показать все введенные символы без уменьшения их размера. Поэтому
[1 2 3 4 5 6 7 8] должно отображаться вместо [2 3 4 5 6 7 8 |]
Я пытался поместить курсор вправо от восьмого символа, однако это меняет весь кернинг и влияет на все остальные символы.
Как правильно обращаться с этим? Как я должен предотвратить движение курсора, чтобы UITextField не прокручивал вправо?
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let textFieldText = textField.text,
let rangeOfTextToReplace = Range(range, in: textFieldText),
!string.containsSpecialCharacters else {
return false
}
let substringToReplace = textFieldText[rangeOfTextToReplace]
let count = textFieldText.count - substringToReplace.count + string.count
return count <= 8
}