Я пытаюсь разрешить ввод десятичных цифр только в приложении для iOS. У меня есть этот фрагмент, который очень хорошо работает во всех ситуациях.
override func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = NSMutableCharacterSet.decimalDigit()
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
Это настолько просто, насколько это возможно, и это был ответ, который я нашел повсюду на SO.
Однако , вот в чем проблема: акцентированные символы без букв. Трудно объяснить это поведение. Когда я пишу такой символ, как ¨
или `
, я попадаю в состояние, в котором я могу использовать такой символ, как e
, чтобы получить è
. Это довольно стандартный способ ввода символов с акцентом на пользователя.
Мы попадаем в это состояние, где подсвечивается ¨
, и я могу выполнить o
, чтобы затем получить ö
.
Однако символ с ударением (¨
) не вызывал shouldChangeCharactersIn range
вызов. Похоже, iOS решает проигнорировать этот результат и по-прежнему добавляет в символ.
Как я могу заблокировать это поведение ? Насколько я понимаю, это можно воспроизвести только с помощью аппаратной клавиатуры, но мы ожидаем, что наши пользователи будут ее использовать.