Возможно ли в iOS использовать десятичную панель с поддержкой ascii в качестве типа клавиатуры для типа клавиатуры UITextfield? - PullRequest
0 голосов
/ 08 января 2019

Приложение, которое я пишу, поддерживает несколько языков, но есть 1 текстовое поле, в котором я хочу, чтобы пользователь записывал только цифры ascii (т.е. без арабских чисел) и десятичные разделители. Я знаю, что можно установить UITextfield keyboardType, но, к сожалению, есть .decimalPad и asciiCapableNumberPad, но ни один из них не соответствует моим потребностям, так как asciiCapableNumberPad не имеет кнопки десятичного разделителя и decimalPad не ограничивает его номерами ASCII.

Возможно ли иметь asciiCapableDecimalPad? Если нет, то каков наилучший способ ограничить ввод пользователя только цифрами и десятичными разделителями в формате UITextField?

1 Ответ

0 голосов
/ 06 марта 2019

Я не нашел способа заставить клавиатуру с номером ASCII и десятичным разделителем сразу. На iPhone 8, когда у пользователя есть только арабская клавиатура, для .decimalPad будет отображаться клавиатура с только восточными арабскими цифрами (٠١٢٣٤٥٦٧٨٩), когда есть несколько клавиатур (например, с английской клавиатурой), у пользователя будет кнопка переключения для смены различных цифр. Но это поведение нарушено для семейства iPhone X для меня, я думаю, что это ошибка со стороны Apple, кнопка переключения не существует.

Я решил эту проблему с помощью метода textField (_: shouldChangeCharactersIn: replaceString:) и внутри этого метода я заменяю Восточные арабские цифры (Арабский-Индийский?) На цифры ASCII (известные также как Западно-арабские цифры ) для проверки правильности ввода символов при наборе.

result = [result stringByReplacingOccurrencesOfString:@"٠" withString:@"0"];
result = [result stringByReplacingOccurrencesOfString:@"١" withString:@"1"];
result = [result stringByReplacingOccurrencesOfString:@"٢" withString:@"2"];
result = [result stringByReplacingOccurrencesOfString:@"٣" withString:@"3"];
result = [result stringByReplacingOccurrencesOfString:@"٤" withString:@"4"];
result = [result stringByReplacingOccurrencesOfString:@"٥" withString:@"5"];
result = [result stringByReplacingOccurrencesOfString:@"٦" withString:@"6"];
result = [result stringByReplacingOccurrencesOfString:@"٧" withString:@"7"];
result = [result stringByReplacingOccurrencesOfString:@"٨" withString:@"8"];
result = [result stringByReplacingOccurrencesOfString:@"٩" withString:@"9"];
result = [result stringByReplacingOccurrencesOfString:@"٫" withString:@"."];

Я делаю то же самое в textFieldDidEndEditing: . Есть вероятность, что этот шаг не нужен, но мне нужно отформатировать число и после потери фокуса.

Это исправление находится в стадии тестирования, и я сообщу вам, если есть какие-либо проблемы с этим.

...